MSSQL导入数据到MYSQL出错,Incorrect string value: '\xF0\x9F\x92\x9C' for column '

时间:2021-07-14 20:16:20
将数据从MSSQL2005迁移到MYSQL5,使用的是MySQL Migration Toolkit,MYSQL数据库和表以及字段都是UTF-8的格式,NickName是用户输入的内容,有些特殊字符,难道GBK能存的字符在UTF-8下还会存不进去?

详细出错信息:
Incorrect string value: '\xF0\x9F\x92\x9C' for column 'NickName' at row 123
          Incorrect string value: '\xF0\x9F\x8C\xB9\xE7\x97...' for column 'NickName' at row 587
          Incorrect string value: '\xF0\x9F\x98\x8A\xE6\xB5...' for column 'NickName' at row 1436
          Incorrect string value: '\xF0\x9F\x98\x8D' for column 'NickName' at row 643
          Incorrect string value: '\xF0\xA3\xA1\xBD\xF0\xA8...' for column 'NickName' at row 614
          Incorrect string value: '\xF0\x9F\x92\xA6' for column 'NickName' at row 1404
          Incorrect string value: '\xF0\x9F\x8C\x80  ...' for column 'NickName' at row 1469
          Incorrect string value: '\xF0\x9F\x92\x80' for column 'NickName' at row 810
          Incorrect string value: '\xF0\x9F\x99\x8A\xE5\x85...' for column 'NickName' at row 1163
          Incorrect string value: '\xF0\x9F\x98\xB1' for column 'NickName' at row 682
          Incorrect string value: '\xF0\x9F\x94\x85\xE6\x80...' for column 'NickName' at row 1267
          Incorrect string value: '\xF0\x9F\x92\x8BS_...' for column 'NickName' at row 134
          Incorrect string value: '\xF0\x9F\x92\x8B' for column 'NickName' at row 582
          Incorrect string value: '\xF0\x9F\x98\x98\xE6\xB3...' for column 'NickName' at row 1406
          Incorrect string value: '\xF0\x9F\x92\x8B' for column 'NickName' at row 764
          Incorrect string value: '\xF0\x9F\x90\xAC' for column 'NickName' at row 1278

13 个解决方案

#1


show variables like 'char%';
统一一下字符集
set names 'gbk';

#2


show variables like 'char%'; 
用BCP导出再用LOAD DATA INIFILE导入试试

#3


设成gbk的字符集导试试

#4


set names 'gbk'; 然后再操作。

http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/12/4174186.aspx
MySQL 中文显示乱码

#5


引用 4 楼 ACMAIN_CHM 的回复:
set names 'gbk'; 然后再操作。

http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/12/4174186.aspx
MySQL 中文显示乱码


不是乱码,是大部份数据导入进来了,但有些出错,中文的也没有问题,只是个别数据有问题,但是是用MySQL Migration Toolkit导入的,所以我不知道到底哪条数据有问题

#6


只有1个表1个表导入,看看问题出在什么表中,再确定什么记录出问题

#7


引用 6 楼 wwwwb 的回复:
只有1个表1个表导入,看看问题出在什么表中,再确定什么记录出问题

我能确定吧个表,还可以确定哪个字段,但是没办法确定哪条记录有问题,MySQL Migration Toolkit是只报错误,看不到具体吧条出了问题的

#8


用BCP导出这个 表的记录,再用LOAD DATA INIFILE导入MYSQL中,确定是哪条记录
出问题

#9


到底是导入时出错?还是导出时出错?


如果是导入,则可以先手工编辑一下文本文件,把内容拆分,看执行到哪一部分出的问题。

#10


谢谢各位了,虽然还是没有找到原因,我换另一个工具导入没有问题了,可能是MySQL Migration Toolkit这个工具本身有问题吧

#11


难道UTF-8的不能插入数据吗

#12


这种请况是数据库字符集设置问题。utf8可以插入数据的。
你使用的是mysql administrator工具吧。那样比较方便。有两个方法解决。
       方式一:安装mysql后,软件自带的mysql server instance config wizard来重新配置数据库,“开始菜单”——“程序”——“mysql”——“mysql server instance config wizard”,在配置过程中,遇到一个设置default char set的地方(有3个选项,选最下面一个),设置默认为utf8即可。这个方法可以从根本上解决。
方式二:另外,如果不想改变整个数据库的配置,可以选择改变表和数据表相应的列的字符集配置。
用这条语句show full columns from TABLENAME;来查看某数据表的所有列的信息,我们可以看到其字符集。
若要改变数据表的字符集:进入mysql query browser,然后选择“你要操作的数据库”——“你要输入数据的数据表”右击,编辑表,选择“table options”,可以看到设置char set。若要可以输入
中文,设置为utf8。
这样如果还不行,还需要设置你需要输入中文的那一列的字符集:进入edit table界面,单击列,然后选择下方的Column Details。这时可以可以设置字符集为utf8.

以上两种方法应该可以解决问题,你试试吧。如果通过了,可以给分就好了。呵呵

#13


原因是UTF-8编码有可能是两个、三个、四个字节。Emoji表情或者某些特殊字符是4个字节,而Mysql的utf8编码最多3个字节,所以数据插不进去。

#1


show variables like 'char%';
统一一下字符集
set names 'gbk';

#2


show variables like 'char%'; 
用BCP导出再用LOAD DATA INIFILE导入试试

#3


设成gbk的字符集导试试

#4


set names 'gbk'; 然后再操作。

http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/12/4174186.aspx
MySQL 中文显示乱码

#5


引用 4 楼 ACMAIN_CHM 的回复:
set names 'gbk'; 然后再操作。

http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/12/4174186.aspx
MySQL 中文显示乱码


不是乱码,是大部份数据导入进来了,但有些出错,中文的也没有问题,只是个别数据有问题,但是是用MySQL Migration Toolkit导入的,所以我不知道到底哪条数据有问题

#6


只有1个表1个表导入,看看问题出在什么表中,再确定什么记录出问题

#7


引用 6 楼 wwwwb 的回复:
只有1个表1个表导入,看看问题出在什么表中,再确定什么记录出问题

我能确定吧个表,还可以确定哪个字段,但是没办法确定哪条记录有问题,MySQL Migration Toolkit是只报错误,看不到具体吧条出了问题的

#8


用BCP导出这个 表的记录,再用LOAD DATA INIFILE导入MYSQL中,确定是哪条记录
出问题

#9


到底是导入时出错?还是导出时出错?


如果是导入,则可以先手工编辑一下文本文件,把内容拆分,看执行到哪一部分出的问题。

#10


谢谢各位了,虽然还是没有找到原因,我换另一个工具导入没有问题了,可能是MySQL Migration Toolkit这个工具本身有问题吧

#11


难道UTF-8的不能插入数据吗

#12


这种请况是数据库字符集设置问题。utf8可以插入数据的。
你使用的是mysql administrator工具吧。那样比较方便。有两个方法解决。
       方式一:安装mysql后,软件自带的mysql server instance config wizard来重新配置数据库,“开始菜单”——“程序”——“mysql”——“mysql server instance config wizard”,在配置过程中,遇到一个设置default char set的地方(有3个选项,选最下面一个),设置默认为utf8即可。这个方法可以从根本上解决。
方式二:另外,如果不想改变整个数据库的配置,可以选择改变表和数据表相应的列的字符集配置。
用这条语句show full columns from TABLENAME;来查看某数据表的所有列的信息,我们可以看到其字符集。
若要改变数据表的字符集:进入mysql query browser,然后选择“你要操作的数据库”——“你要输入数据的数据表”右击,编辑表,选择“table options”,可以看到设置char set。若要可以输入
中文,设置为utf8。
这样如果还不行,还需要设置你需要输入中文的那一列的字符集:进入edit table界面,单击列,然后选择下方的Column Details。这时可以可以设置字符集为utf8.

以上两种方法应该可以解决问题,你试试吧。如果通过了,可以给分就好了。呵呵

#13


原因是UTF-8编码有可能是两个、三个、四个字节。Emoji表情或者某些特殊字符是4个字节,而Mysql的utf8编码最多3个字节,所以数据插不进去。