1.插入中文数据报错
报错内容类似: ERROR 1366 (HY000): Incorrect string value: '\xC4\xE3\xBA\xC3' for column 'username' at row 1
造成这种原因主要是数据库编码不一致的问题,一般我们将数据库的编码设置为 utf8 即可。
mysql的数据库编码分为4个级别:
服务器 < 数据库 < 表编码 < 列编码
如果当前等级未设置编码,则默认选用上一级的。
- 查看数据库编码情况
SHOW VARIABLES LIKE 'character%' ;
-- 查看表的编码
desc tb1_book;
这个主要是查看建表sql
-- 查看表的列的校验字符集
SHOW FULL COLUMNS FROM tb1_book;
- 设置数据库编码
ALTER DATABASE test CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'
- 设置服务器编码
找到mysql 配置文件 my.ini
设置 default-character-set=utf8 和 character-set-server= utf8 即可,修改设置后记得重启mysql 服务。 重新使用上面的 SHOW VARIABLES LIKE 'character%' ;重新查一遍
- 使用 utf8mb4 , 而不要使用 utf8 (有历史遗留问题,部分汉字有问题)
我昨天遇到的坑主要是把表重新创建时复制了 sqlyog里的sql ,结果因为默认编码为 Latin,导致我复制出来的sql中设置了列编码。后面虽然把服务器、数据库、表编码都调整过来了,但列编码依然不匹配,导致一直插入中文记录失败