MySql 数据库中文编码错误

最近在用Mysql做后台时,数据存储返回如下错误:

Error 1366: Incorrect string value: '\xA0\xF1\x34\x80\x0A0…' for column 'XXX' at row 1

在排除了上层框架原因后,发现是在写MySql过程中,string中包含中文字符的原因,这里简单记录下fix过程,仅供参考。

  1. 查看当前mysql状态
    status 或者 \s 查看当前数据库的编码方式:
    mysql
    假设 Db characterset的编码方式为latin1,则不支持中文存储,一定会报错。
    查询字符集的对应编码格式可以用show character set命令:
    mysql2

    可以发现latin1 对应的是 cp 1252 West European, 肯定是不支持中文的。

  2. 解决方案非常简单,修改数据库和表的编码方式。
    这里需要注意,原先数据库中的数据也是需要修改的。
    也就是需要修改数据表中相关列的数据编码方式

  3. 最好的解决方案是避免出现这种情况,在创建数据库之初即指定号对应的编码方式。

  4. 例如: create database test_db character set gbk; 指定该数据库中所有表格默认都是用gbk编码。

  5. 或者指定某个表的编码方式 create table t_db(strB varchar(20) character set utf8);

  6. 当然,在配置文件中设定亦可。

所谓磨刀不误砍柴工,在开发之初做好设计,可以大大降低工作成本,更可以让你的程序更加健壮,避免后期出现莫名其妙的bug。极大提升程序员的幸福指数。

MySql 数据库中文编码错误
Share this