ERROR 1366 (HY000): Incorrect string value: '\xB3\xA4\xC9\xB3' for column


在用以下方法之前,请先执行下面命令查看。

    show variables like 'character%';  ——查看所有编码方式

    show create table table_name;   ——查看某个表格的编码方式

    status  ——查看

查看修改mysql编码方式
 
MySQL的默认编码是Latin1,不支持中文,要支持中午需要把 数据库的默认编码修改为gbk或者utf8。 
 
1、需要以root用户身份登陆才可以查看数据库编码方式(以root用户身份登陆的命令为:>mysql -u root –p,之后两次输入root用户的密码),查看数据库的编码方式命令为: 
>show variables like 'character%'; 
+--------------------------+----------------------------+ 
| Variable_name | Value | 
+--------------------------+----------------------------+ 
| character_set_client | latin1 | 
| character_set_connection | latin1 | 
| character_set_database | latin1 | 
| character_set_filesystem | binary | 
| character_set_results | latin1 | 
| character_set_server | latin1 | 
| character_set_system | utf8 | 
| character_sets_dir | /usr/share/mysql/charsets/ | 
+--------------------------+----------------------------+ 
从以上信息可知数据库的编码为latin1,需要修改为gbk或者是utf8; 
其中,character_set_client为客户端编码方式;character_set_connection为建立连接使用的编码;character_set_database数据库的编码; 
character_set_results结果集的编码; 
character_set_server数据库服务器的编码; 
只要保证以上四个采用的编码方式一样,就不会出现乱码问题。 
另一个查看数据库编码的命令: 
>show variables like ‘collation%’; 






一、网上的解决方案很多,但是试了几个都没成功。能改的地方都改了,my.ini里两个地方[mysql]和[mysqld]都改成了gbk,又多此一举跑MySQLInstanceConfig.exe里也设置了默认字符集为gbk,还有在数据库里也使用了charset gbk来更改字符集,可无一例外中文还是插不进去。

最后在http://youshini.iteye.com/blog/1073053上又找到一个解决方案,在数据库里使用了alter table content modify author varchar(30) character set gbk;这句话之后成功插入了中文!心中那个鸡冻啊。

现在知道了,前面把my.ini或者在MySQLInstanceConfig.exe里改变了编码字符集之后只对以后创建的表起作用,对于以前创建的表要使用alter table content modify author varchar(30) character set gbk才可以插入中文,当然,嫌这样一个字段一个字段的修改太麻烦可以使用ALTER TABLE OLD_TABLE CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]直接对整个表操作。
。这里把问题及解决方案贴出方便后来人!个人总结出mysql数据库要正常插入中文需要三个地方字符集一致:

1、mysql的初始化字符集(my.ini中修改)

2、某个具体的database中通过charset gbk或者\c gbk修改

3、最后这个不是必须的,只是如果在中途改了以上两个字符集才需要在此修改。把表中的字段改成和上面两种一样的字符集:通过ALTER TABLE OLD_TABLE CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]修改

 

 

二、最后再附上一篇整体概述的设置mysql支持中文的文章,转于51cto.com

MySQL数据库默认编码已经是utf8了, default-character-set = utf8,可是向数据库中表中插入中文时,却老是出现 ....\xB5\xA5\xD1\xA1 for column...这样的错误,经过查阅网上类型的错误后,发现一个很奇妙的现象,接下来我们就来开始介绍。

1)、在安装数据库时就设定字符集编码为utf8的环境下

1.在当前字符集编码为:

1 Server characterset:    utf8  

2  

3 Db      characterset:    utf8  

4  

5 Client  characterset:    utf8  

6  

7 Conn.  characterset:    utf8 

下创建数据库:

(1)插入中文数据,操作不能成功。

(2)修改字符集编码为:

8 Server characterset:    utf8  

9  

10 Db       characterset:   utf8  

11  

12 Client  characterset:    gbk  

13  

14 Conn.  characterset:    gbk 

插入中文数据,显示正常。

2)、在安装数据库时就设定字符集编码为gbk的环境下

1.当前字符集编码是:

15 Server characterset:    gbk  

16  

17 Db      characterset:    gbk  

18  

19 Client  characterset:   gbk  

20  

21 Conn.  characterset:   gbk  

下创建数据,插入中文数据,操作正常,显示正常。

2.当前字符集编码为utf8:

22 Server characterset:   gbk  

23  

24 Db      characterset:    utf8  

25  

26 Client  characterset:   utf8  

27  

28 Conn.  characterset:   utf8 

3.当前字符集编码为utf8:

29 Server characterset:    gbk  

30  

31 Db      characterset:    gbk  

32  

33 Client  characterset:   utf8  

34  

35 Conn.  characterset:   utf8 

插入中文数据,操作不能执行。

结论:要想能向数据库正常插入中文,必须满足以下条件:

1.要把字符集设定为能支持中文的gbk或则utf8;

2.把数据库的Client Characterset和Conn. Characterset的字符集都设定为gbk;

根据上面的提示 ,我更改了:

36 SET  character_set_client=gbk;  

37  

38 SET character_set_connection=gbk; 

之后再尝试想数据库插入中文,这时没有出错,能插入可是查询出来是乱码。

最后再更改; 

39 SET character_set_results=gbk; 

这样之后,所有的问题都解决了,能正常插入也能正常显示了。(http://hi.baidu.com/vanadium362/item/ffa64caed7ee5eae29ce9d32




最后各种数据编码问题:http://bbs.youkuaiyun.com/topics/190115814

<think>首先,用户的问题是关于MySQL错误"ERROR1366(HY000):Incorrectstringvalue"的解决方案,这涉及到字符串编码问题。用户提到了错误发生在插入中文字符时,如参考引用中所示。参考引用[1]和[2]显示了具体的错误消息,[3]提到字符集的设置。用户的需求是解决这个错误,特别是在插入数据时遇到的字符串编码错误,针对s_name列。我需要基于提供的引用回答这个问题。引用[1]和[2]是示例错误,[3]提供了解决方案的线索:设置字符集为utf8。关键点:-错误"ERROR1366"通常是由于字符集不匹配造成的,数据库的字符集不支持插入的字符串(如中文)。-解决方案包括设置数据库、表或列的字符集为utf8utf8mb4,以支持Unicode字符。参考引用[3]说明:-在创建表时,可以设置默认字符集:`defaultcharactersetutf8`或`defaultcharset=utf8`。-在列级别设置:`filed_namevarchar(20)charactersetutf8`。-示例:`createtabletable_name(filed_namevarchar(20)charactersetutf8)defaultcharactersetutf8;`我还需要考虑一般的MySQL编码问题解决步骤:1.检查数据库、表和列的字符集。2.如果需要,更改字符集。3.确保客户端连接使用正确的编码。由于用户提到了"s_name",这可能是列名,我应该建议具体针对该列的操作。回答结构:-按照系统级指令,使用中文回答。-结构清晰,逐步解决问题。-包含LaTeX格式的数学表达式和独立公式时使用正确格式(但这个问题可能不涉及数学,除非是代码或表达式)。-生成相关问题(最后添加)。-在回答末尾添加引用标识,如[^1],引用用户提供的引用内容。引用使用:-用户提供了引用[^1],[^2],[^3],我应该参考它们,但避免过多重复。-引用仅供参考,我要基于用户上一次问题和当前回答。用户上一次问题:用户想解决MySQL中的错误,问题描述是"MySQLERROR1366HY000Incorrectstringvalue解决方案字符串编码问题s_name"。在回答中:-解释原因:字符集不一致导致无法存储中文字符。-提供步骤:检查当前字符集设置;修改表或列的字符集;确保插入时的连接编码。-使用代码示例,因为引用中有代码。代码块在回答中需要使用适当的格式,就像示例中的Python代码。完整回答结构:1.错误原因简介。2.解决方案步骤:-检查当前设置。-修改字符集。-示例代码。-客户端设置。3.总结。4.生成相关问题。5.添加引用标识。最终添加相关问题:例如,"如何防止MySQL编码错误?"、"utf8utf8mb4的区别?"、"MySQL字符集优化建议?"。确保回答真实可靠:基于MySQL文档和已知解决方案。</think> ### MySQL ERROR 1366 (HY000) Incorrect string value 解决方案:字符串编码问题(针对s_name列) 当MySQL插入数据时出现错误`ERROR 1366 (HY000): Incorrect string value`,这通常是由于字符集(编码格式)不匹配造成的。数据库无法识别插入的字符串值(如中文),特别是针对`s_name`列这种包含非ASCII字符的列。参考您提供的引用,错误信息中的`&#39;\xE6\x9B\xBE\xE5\x8D\x8E&#39;`(如引用[1]所示)表示MySQL尝试使用不支持中文字符的字符集(如`latin1`)存储UTF-8编码的字符串[^1]。 错误原因主要是: - 数据库、表或列的字符集未设置为UTF-8(或utf8mb4)。 - 客户端连接(如命令行或程序)未指定正确的编码。 - 数据本身是以UTF-8格式输入的,但数据库以不支持的方式处理。 下面我将一步步提供解决方案,帮助您解决针对`s_name`列的编码错误。解决方案基于MySQL标准操作和您参考的字符集设置建议(引用[3])[^3]。操作前,请确保有数据库管理员权限,并在安全环境下(如备份数据库)进行测试。 #### 步骤1: 检查当前字符集设置 首先,确认数据库、表和列的当前字符集设置。这能帮助诊断问题所在。 - 连接到MySQL命令行(假设您使用MySQL客户端): ```sql -- 检查数据库的字符集(替换your_database为您的数据库名) SHOW CREATE DATABASE your_database; -- 检查表的字符集(替换your_table为您的表名) SHOW CREATE TABLE your_table; -- 检查特定列的字符集(这里针对s_name列) SELECT COLUMN_NAME, CHARACTER_SET_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = &#39;your_database&#39; AND TABLE_NAME = &#39;your_table&#39; AND COLUMN_NAME = &#39;s_name&#39;; ``` - 输出示例:如果字符集是`latin1`或`ascii`,就会导致错误。需要改为`utf8`或`utf8mb4`(utf8mb4支持更全面的Unicode字符,如表情符号)。 - 为什么:错误发生在列级别时(如引用[1]的s_name列),可能表或列未配置为UTF-8。 #### 步骤2: 修改表和列的字符集为utf8utf8mb4 如果检查发现字符集不正确,使用ALTER TABLE命令修改表和列的字符集。以下是针对`s_name`列的具体操作。 - **修改整个表为utf8(引用[3]的方法)**: ```sql -- 修改表的默认字符集为utf8 ALTER TABLE your_table CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; -- 或者使用utf8mb4(推荐,支持更多字符) ALTER TABLE your_table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; ``` - 这会自动将表中所有列的字符集更新为指定值。 - **仅修改s_name列的字符集(如果其他列无问题)**: ```sql ALTER TABLE your_table MODIFY s_name VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci; -- 或使用utf8mb4 ALTER TABLE your_table MODIFY s_name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; ``` - 解释:`VARCHAR(255)` 假设您的列定义类似此;替换为您的实际列长度。`COLLATE`部分指定排序规则,`utf8_general_ci`是常用选项(case-insensitive,大小写不敏感)。 - **创建新表时设置字符集(预防未来错误)**: 参考引用[3],在CREATE TABLE语句中指定字符集[^3]: ```sql CREATE TABLE your_table ( id INT PRIMARY KEY, s_name VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci, -- 其他列定义... ) DEFAULT CHARACTER SET utf8; -- 或用utf8mb4 CREATE TABLE your_table ( id INT PRIMARY KEY, s_name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci, -- 其他列定义... ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; ``` #### 步骤3: 检查并设置客户端连接的编码 错误可能来自客户端(如命令行)未使用UTF-8编码发送数据。参考引用[2],命令行操作时错误常因DOS环境默认编码不同造成[^2]。 - **在命令行连接时指定编码**: ```bash # 连接MySQL时添加--default-character-set=utf8参数 mysql -u your_user -p --default-character-set=utf8 ``` - 这会确保数据以UTF-8格式传输。 - **在MySQL客户端设置会话编码**: ```sql -- 在MySQL命令行中执行 SET NAMES &#39;utf8&#39;; -- 或用utf8mb4 SET NAMES &#39;utf8mb4&#39;; ``` - 这设置当前会话的编码,解决插入时的即时问题。 - **程序代码中设置编码**:如果您通过程序(如PHP、Python)插入数据,确保连接字符串指定UTF-8: - PHP示例: ```php $conn = new mysqli($servername, $username, $password, $dbname); $conn->set_charset("utf8"); ``` - Python示例: ```python import mysql.connector conn = mysql.connector.connect( host="localhost", user="your_user", password="your_password", database="your_database", charset="utf8" ) ``` #### 步骤4: 测试插入操作 修改后,测试插入中文字符数据: ```sql INSERT INTO your_table (s_name) VALUES (&#39;曾华&#39;); -- 或完整示例(引用[1]的INSERT) INSERT INTO student VALUES(&#39;101&#39;,&#39;曾华&#39;,&#39;男&#39;,&#39;1977-09-01&#39;,&#39;95033&#39;); ``` - 预期结果:如果没有错误,表示问题已解决。 - 如果仍出错,检查: - 确认所有字符集已更新(重启MySQL可能有帮助)。 - 确保数据文件本身是UTF-8格式(如导出CSV文件前检查编码)。 - 升级MySQL到较新版本,旧版本utf8支持有限。 #### 为什么这些解决方案有效 - 错误根源是字符集不兼容:UTF-8编码的字符串需要数据库以相同方式存储。 - 设置为`utf8`或`utf8mb4`确保MySQL能正确处理中文(如`曾华`)。 - 引用[3]中的方法已验证有效,您可以在数据库设计中集成这些设置来预防问题[^3]。 #### 相关问题(用于深入了解) 1. MySQL中如何检查当前的全局字符集设置? 2. utf8utf8mb4的区别是什么?为什么utf8mb4更适合现代应用? 3. 如果MySQL表数据已存在,如何在不丢失数据的情况下修复字符集错误? 如果您有其他具体配置问题,如数据库版本或更多错误细节,欢迎提供![^1][^2][^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值