insert into mysql 报错_MySQL 中文insert报错Incorrect string value: '\xCC\xEC\xB2\xC5'

序言:

中文录入失败,报错:Incorrect string value: '\xCC\xEC\xB2\xC5',如下所示:

mysql> set names utf8;

Query OK, 0 rows affected (0.00 sec)

mysql> insert into t select 2 as a ,'天才' as b;

ERROR 1366 (HY000): Incorrect string value: '\xCC\xEC\xB2\xC5' for column 'b' at row 1

mysql>

mysql>

1,去查看数据库的字符集,是utf8,显示正常的。

mysql> show variables like '%char%';

+--------------------------+----------------------------------+

| Variable_name            | Value                            |

+--------------------------+----------------------------------+

| character_set_client     | utf8                             |

| character_set_connection | utf8                             |

| character_set_database   | utf8                             |

| character_set_filesystem | binary                           |

| character_set_results    | utf8                             |

| character_set_server     | utf8                             |

| character_set_system     | utf8                             |

| character_sets_dir       | /usr/local/mysql/share/charsets/ |

+--------------------------+----------------------------------+

8 rows in set (0.00 sec)

mysql>

2,去查看连接客户端的字符集,

vim /etc/my.cnf

#----------------- UTF-8 -----------------#

skip-character-set-client-handshake

init-connect='SET NAMES utf8'

character-set-server=utf8

#----------------- UTF-8 -----------------#

看到connect连接有utf8设置,也保证了,通过mysql命令行登录看到的是utf8编码的。

3,通过sqlyog远程工具操作,在Query窗口执行如下命令:

SET NAMES utf8;

INSERT INTO t SELECT 3  AS a ,'第二梦'  AS b;

是成功的,执行界面显示如下:

2 queries executed, 2 success, 0 errors, 0 warnings

Query: set names utf8

0 row(s) affected

Execution Time : 0 sec

Transfer Time  : 0 sec

Total Time     : 0.001 sec

--------------------------------------------------

Query: insert into t select 3 as a ,'第二梦' as b

1 row(s) affected

Execution Time : 0.002 sec

Transfer Time  : 0 sec

Total Time     : 0.002 sec

在sqlyog窗口查询t表,也正常显示中文字符,如下图所示:

0818b9ca8b590ca3270a3433284dd417.png

但是在linux后面使用mysql窗口命令登录,还是乱码,如下所示:

mysql> SELECT * FROM t;

+---+-----------+

| a | b         |

+---+-----------+

| 1 | bb        |

| 1 | ??      |

| 2 | 骞村.    |

| 3 | 绗.?姊?|

+---+-----------+

4 rows in set (0.00 sec)

mysql>

那么以此推断,问题在哪里呢,客户端sqlyog能正常录入中文显示中文,而linux的mysql窗口不行,得去检查os层的linux操作系统的字符集设置。

4,检查mysql服务器所在的linux os的字符集

[root@data01 ~]# cat /etc/sysconfig/i18n

LANG="zh_CN.GB18030"

LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"

SUPPORTED="zh_CN.UTF-8:zh_CN:zh:en_US.UTF-8:en_US:en"

SYSFONT="lat0-sun16"

modified by timman on 2015/03/03

看到这里面不是GB18030,不是utf8,所以需要重新设置下,从线上copy一下/etc/sysconfig/i18n 的内容,将此改成如下

[root@data01 ~]# cat /etc/sysconfig/i18n

# LANG="zh_CN.GB18030"

# LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"

# SUPPORTED="zh_CN.UTF-8:zh_CN:zh:en_US.UTF-8:en_US:en"

# SYSFONT="lat0-sun16"

# modified by timman on 2015/03/03

LANG="zh_CN.UTF-8"

然后重启linux,重启mysql,或者export LANG="zh_CN.UTF-8";

[root@data01 ~]# service mysqld5612 restart

Shutting down MySQL......... SUCCESS!

Starting MySQL..................................................................... SUCCESS!

[root@data01 ~]#

5,测试,为了数据统一,linux重新设置字符集,然后重新登录执行中文录入操作,所以表drop后create,还是报错,录入不了中文进去,编码问题

mysql> INSERT INTO t SELECT 4  AS a ,'第四梦'  AS b;

ERROR 1366 (HY000): Incorrect string value: '\xB5\xDA\xCB\xC4\xC3\xCE' for column 'b' at row 1

mysql>

但是使用sqlyog可以录入的,但是在linux的mysql操作窗口查询任然乱码,如下:

mysql> SELECT * FROM t;

+------+-----------+

| a    | b         |

+------+-----------+

|    3 | 绗.?姊?|

+------+-----------+

1 row in set (0.00 sec)

mysql>

分析:最后想到sqlyog工具可以,linux系统也是utf8了,数据库也是utf8编码,那只有连接mysql所在的linux服务器的远程工具的shell终端的编码了,马上去check我的shell连接工具xshell

6,检查xshell工具连接,在Terminal->Encoding:后面的下拉框里面,发现是默认的,没有设置成utf8编码,如下图所示:

0818b9ca8b590ca3270a3433284dd417.png

然后修改成utf8,如下所示:

0818b9ca8b590ca3270a3433284dd417.png

然后再去执行,就可以录入中文了,如下所示:

mysql> INSERT INTO t SELECT 4  AS a ,'第四梦'  AS b;

Query OK, 1 row affected (0.11 sec)

Records: 1  Duplicates: 0  Warnings: 0

mysql>

0818b9ca8b590ca3270a3433284dd417.png

7,番外篇set names utf8;无效的原因

大家请参考:http://blog.csdn.net/zsmj_2011/article/details/7943734

PS:总结,因为mysql有服务端编码和客户端编码概念之分,我的服务器端已经是utf8编码,而我的MYSQL客户端(不是mysql窗口界面而是远程连接mysql服务器的客户端工具xshell),明显是GBK或ansi环境,所以必须设置成utf8才能转换成功。

所以对于中文乱码,需要去check的地方有如下3个:1、mysql窗口的字符编码(xshell连接的远程工具的字符集设置);2、数据库的字符编码(show variables like '%char%');3、linux操作系统的字符编码(echo $LANG);

----------------------------------------------------------------------------------------------------------------原博客地址:       http://blog.itpub.net/26230597/viewspace-1447291/原作者:黄杉 (mchdba)----------------------------------------------------------------------------------------------------------------

你遇到的错误信息是 "Incorrect string value",这意味着在导入数据时,有些字符串的编码格式不正确。根据引用和引用提供的信息,这个问题可能由于数据库中的字符集与数据文件中的字符集不兼容导致的。要解决这个问题,你可以尝试以下几种方法: 1. 确认数据库的字符集:首先,你需要确认数据库的字符集设置正确。你可以使用以下命令查询当前数据库的字符集设置: ```sql SHOW VARIABLES LIKE 'character_set_database'; ``` 确保数据库的字符集与你导入数据文件的字符集一致。 2. 修改数据文件的字符集:如果数据库的字符集设置正确,那么问题可能是数据文件的字符集与数据库不匹配。你可以尝试修改数据文件的字符集,将其转换为数据库所使用的字符集。你可以使用一些文本编辑器或是转换工具来完成这个过程。 3. 修改数据库表的字符集:如果以上方法都没有解决问题,你可以尝试修改数据库表的字符集,将其与数据文件的字符集保持一致。你可以使用以下命令修改表的字符集: ```sql ALTER TABLE table_name CONVERT TO CHARACTER SET charset_name; ``` 将 "table_name" 替换为你的表名,将 "charset_name" 替换为你要使用的字符集名称。 同时,根据引用的信息,如果你遇到了 "Incorrect integer value" 的错误,那么可能是你试图向一个整数列插入了一个非整数值。你可以使用以下方法解决这个问题: 1. 检查数据类型:首先,确保你要插入的值是一个整数。请检查数据文件中的值,并确保它们都是整数类型。 2. 检查列类型:如果你确定要插入的值是一个整数,那么请检查目标列的数据类型是否正确。你可以使用以下命令查看列的数据类型: ```sql SHOW COLUMNS FROM table_name; ``` 确保目标列的数据类型是整数类型。 3. 检查数据格式:有时,数据文件中的值可能包含了空格、逗号或其他非数字字符。请确保数据文件中的值是纯数字,并且不包含任何非数字字符。 希望以上方法能够帮助你解决 "Incorrect string value" 和 "Incorrect integer value" 的问题。如果问题仍然存在,你可能需要进一步检查数据库和数据文件的设置,或者考虑联系数据库管理员寻求帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Incorrect string value: ‘\xC3\xA7\xC2\x8C\xC2\xAB‘ for column ‘name‘ at row 1 可以尝试的解决方法](https://blog.csdn.net/m0_56170277/article/details/125270283)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Mysql 导入Incorrect string value: ‘\xCF\xF2\xB7\xBD\xB9\xFA‘ for column](https://blog.csdn.net/weixin_43833851/article/details/115706603)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [解决出现Incorrect integer value: '' for column 'id' at row 1的问题](https://download.csdn.net/download/weixin_38599712/12871958)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值