mysql使用踩坑记录

352 阅读1分钟

1.插入中文数据报错

报错内容类似: ERROR 1366 (HY000): Incorrect string value: '\xC4\xE3\xBA\xC3' for column 'username' at row 1

造成这种原因主要是数据库编码不一致的问题,一般我们将数据库的编码设置为 utf8 即可。

mysql的数据库编码分为4个级别:

服务器 < 数据库 < 表编码 < 列编码

如果当前等级未设置编码,则默认选用上一级的。

  • 查看数据库编码情况

SHOW VARIABLES LIKE 'character%' ;

image.png

-- 查看表的编码

desc tb1_book;

这个主要是查看建表sql

image.png

-- 查看表的列的校验字符集

image.png

SHOW FULL COLUMNS FROM tb1_book;

image.png

  • 设置数据库编码

ALTER DATABASE test CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'

  • 设置服务器编码

找到mysql 配置文件 my.ini

设置 default-character-set=utf8character-set-server= utf8 即可,修改设置后记得重启mysql 服务。 重新使用上面的 SHOW VARIABLES LIKE 'character%' ;重新查一遍

  • 使用 utf8mb4 , 而不要使用 utf8 (有历史遗留问题,部分汉字有问题)

我昨天遇到的坑主要是把表重新创建时复制了 sqlyog里的sql ,结果因为默认编码为 Latin,导致我复制出来的sql中设置了列编码。后面虽然把服务器、数据库、表编码都调整过来了,但列编码依然不匹配,导致一直插入中文记录失败