错误如题所示,发生在向MySQL导入“*.sql”的过程中。
具体场景如下所示:

如上,可以看到导入数据的过程中,有大量的:
1. ERROR 1366 (HY000): Incorrect string value
2. ERROR 1406 (22001): Data too long for column
这样的错误。

该错误的产生原因是因为:
MySQL的导入目标库与源库的字符集不同

看看数据导入的情况:

可以看到admin表的数据导入了,但是t_armystudent的数据却没有导入成功。

SQL脚本中对于这两个表的插入行为是这样定义的:
admin
mysql_import_sql_1

t_armystudent
mysql_import_sql_2

如上,
英文字符集,导入成功。
中文字符集,导入失败。

源库的字符集:
mysql_import_character_source_1

目标库(当前出问题的库)的字符集:

如上,当前库(目标库)的字符集是:GBK。

关于MySQL中的字符集参数:
character_set_client,客户端使用的字符集
character_set_connection,连接数据库的字符集。如果没有程序没有指定连接数据库的字符集,则使用服务器默认的字符集。
character_set_database,对MySQL中特定的数据库设置的字符集。如果数据库艰苦的时候没有指定,则按照默认字符集应用。
character_set_results,MySQL返回客户端结果集的时候使用的字符集。如果没有指定,使用服务器默认字符集。
character_set_server,服务器默认字符集(安装MySQL的时候指定的)
character_set_system,数据库系统使用的字符集。

关于字符集:
UTF8,几乎所有字符
GB2312,简体中文
GBK,简体中文 + 繁体中文

解决方法:
解决MySQL字符集的问题的方法有很多种。

第一种:修改数据库的字符集:

可以看到,“alter database … character set … ”改变的其实是以下两个参数的值:
1. character_set_database
2. character_set_system

你也可以直接去修改这两个参数的值。

第二种:
修改MySQL配置文件my.ini中的:
character-set-server
character_set_filesystem
default-character-set

修改后的my.ini文件如下:

然后,重启MySQL服务。

——————————————————————
字符集修改好后,重新执行导入操作:

可以看到,这时候就没问题了
——————————————————————
Done。

1 thought on “MySQL error:ERROR 1366 (HY000): Incorrect string value: ‘xxxxx’ for column ‘xxxxx’ at row xxx”

  1. MySQL的命令行的结果,黏贴到Wordpress的代码高亮中之后,格式有一点点混乱,… 感觉很不舒服。如果格式能够保留和命令行中的展示一致,就很完美了。(强迫症)

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

隐藏
变装