=Start=
缘由:
整理一下MySQL常见的错误码及其解决方法,方便以后要用的时候参考。
正文:
参考解答:
1、MySQL中的utf8编码和utf8mb4编码
先说结论:
- MySQL的“utf8”实际上不是真正的“UTF-8”。
- MySQL的“utf8”是一种“专属的编码”,它能够编码的Unicode字符并不多(只支持最长三个字节的 UTF-8字符,也就是 Unicode 中的基本多文本平面(BMP))。
- MySQL的“utf8mb4”才是真正的“UTF-8”。
MySQL在5.5.3之后增加了utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。当然,为了节省空间,一般情况下使用utf8也就够了(但不支持 Emoji 表情)。
2、Mysql Error 1366: Incorrect string value: ‘\xF0\x9F\x90\xA0’ for column ‘xxx’ at row 1
这通常意味着客户端和服务器之间的字符集设置不一致。
现在的一些聊天记录中时不时会出现一些Emoji表情,所以在建MySQL表存储的时候,需要使用utf8mb4字符集,而非常规的utf8字符集。即,建议普通表使用utf8,如果这个表需要支持emoji就使用utf8mb4。
因此除了在建库建表的时候要注意字符集的设置,在client连接的时候,也要注意字符集的设置要和server端保持一致,否则可能就会出现该错误。
3、Mysql Error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near
这表示有SQL语法错误。常见原因有:
- 行尾该有 逗号(,) 没有,最后一行不该有的却有了;
- 表名、列名建议用 反引号(`) 包裹起来,而不要用单引号/双引号;
- 字符串中的特殊字符(比如:单引号/双引号)要记得转义。
4、Mysql Error 1264: Out of range value for column
要插入的内容超过了字段能表达的范围。比如:
- 要插入的字符串长度为 120 ,但是该列的类型为 VARCHAR(100) ;
- 要插入一个整数 3172978990 到类型为 INT 的字段中,但是因为字段类型的限制,该字段能表示的最大数值为 2147483647(2^31 – 1) 插入时就会报错。
解决办法也很简单,就是将对应的字段类型修改成满足条件的就好。
// 在一条SQL语句中对多个字段类型进行修改 ALTER TABLE qqgroup MODIFY COLUMN group_id BIGINT,
MODIFY COLUMN sender_id BIGINT,
MODIFY COLUMN message_id BIGINT,
MODIFY COLUMN `sender_nickname` varchar(100),
MODIFY COLUMN `message` varchar(1500);
参考链接:
- INSERT gives Error Code: 1366. Incorrect string value: ‘\xF0\x9F\x98\x80’ for column
- “Incorrect string value” when trying to insert UTF-8 into MySQL via JDBC?
- 清官谈mysql中utf8和utf8mb4区别
- MySQL utf8 vs utf8mb4 – What’s the difference between utf8 and utf8mb4?
- 译 | 永远不要在MySQL中使用utf8,改用utf8mb4
https://medium.com/@adamhooper/in-mysql-never-use-utf8-use-utf8mb4-11761243e434 - mysql使用utf8mb4经验吐血总结
- 全面了解mysql中utf8和utf8mb4的区别
- MySQL中utf8与utf8mb4
- 【已解决】mysql插入出错:Error 1064 You have an error in your SQL syntax
- How to escape single quotes in MySQL
- Single Quote, Double Quote, and Backticks in MySQL Queries
- Mysql常见错误码讲解
https://segmentfault.com/a/1190000010996553 - MySQL Error 1264: out of range value for column
- 11.2.6 Out-of-Range and Overflow Handling
=END=