【MySQL】报错 Incorrect string value: ‘\xE5\xA4\xA9\xE5\x96\x9C‘ for column的解决方法

本文讲述了在向数据库插入中文时遇到的错误,解决方法是检查并修改数据库表的字符集为UTF-8,使用ALTERTABLE语句更改列的字符集和校验规则,确保成功插入中文数据。


在这里插入图片描述

在向数据库中插入中文时遇到报错Incorrect string value: '\xE5\xA4\xA9\xE5\x96\x9C' for column ,此时为数据库的编码格式有问题,可以按照如下方法修改


解决方法如下:

使用show create table 表名查看数据库表信息:

在这里插入图片描述

可以看到此时的数据库编码格式为latin

输入以下sql语句将某一字段的字符集和校验规则修改为utf-8

alter table 表名 modify 列名 列数据类型 character set utf8 collate utf8_general_ci;

例如:

alter table user_info modify name varchar(100) character set utf8 collate utf8_general_ci;

在这里插入图片描述

修改后成功向表中的name字段插入中文数据:

insert into user_info (name) values ('天喜');

在这里插入图片描述

<think>我们正在解决MySQL插入中文时出现的"Incorrect string value"错误。根据引用内容,这个问题通常是由于数据库、表或列的字符集不是utf8(或utf8mb4)导致的。以下是解决方案的步骤: ### 1. **检查当前数据库、表和列的字符集** 使用以下命令查看数据库的默认字符集: ```sql SHOW VARIABLES LIKE &#39;character_set_database&#39;; SHOW VARIABLES LIKE &#39;collation_database&#39;; ``` 查看特定表的字符集和排序规则: ```sql SHOW CREATE TABLE 表名; ``` 如果输出中显示字符集是`latin1`,那么插入中文就会出错。 ### 2. **临时解决方案:修改连接字符集** 在连接数据库时,指定字符集为utf8mb4(推荐)或utf8。例如,在连接字符串中添加参数: ``` jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=utf8 ``` ### 3. **永久解决方案:修改数据库、表或列的字符集** #### 修改数据库的默认字符集(对后续新建的表有效): ```sql ALTER DATABASE 数据库名称 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` #### 修改现有表的字符集和所有字符类型列的字符集: ```sql ALTER TABLE 表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` > 注意:将`表名`替换为你的表名。`utf8mb4`是支持4字节UTF8编码的字符集,可以存储所有Unicode字符(包括emoji),而`utf8`在MySQL中只支持3字节,所以推荐使用`utf8mb4`。 ### 4. **修改MySQL配置文件(全局设置)** 编辑MySQL配置文件(通常为`my.cnf`或`my.ini`),在`[mysqld]`部分添加以下配置: ``` [mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci ``` 在`[client]`和`[mysql]`部分添加: ``` [client] default-character-set=utf8mb4 [mysql] default-character-set=utf8mb4 ``` 然后重启MySQL服务。 ### 5. **验证修改结果** 重启MySQL后,登录并执行: ```sql SHOW VARIABLES LIKE &#39;character_set%&#39;; SHOW VARIABLES LIKE &#39;collation%&#39;; ``` 确保`character_set_client`, `character_set_connection`, `character_set_database`, `character_set_results`, `character_set_server`等变量都变为`utf8mb4`(或`utf8`)。 ### 6. **重新插入数据测试** 修改后,再次尝试插入中文字符,应该可以成功。 ### 示例操作流程 假设数据库名为`mydb`,表名为`mytable`: ```sql -- 修改数据库字符集 ALTER DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 修改表的字符集 ALTER TABLE mytable CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 检查表的字符集 SHOW CREATE TABLE mytable; ``` ### 为什么会出现这个错误? - MySQL默认字符集可能是`latin1`,它不支持中文字符。 - 当表或列的字符集是`latin1`时,尝试存储中文字符就会导致“Incorrect string value”错误。 ### 注意事项 - 如果表中有大量数据,修改字符集的操作可能会锁表,请在业务低峰期进行。 - 修改字符集后,确保应用程序连接数据库时也使用相同的字符集(如使用JDBC连接时指定`characterEncoding=utf8`)。 --- §§相关问题§§ 1. 如何将MySQL的字符集从`latin1`转换为`utf8mb4`且不影响现有数据? 2. `utf8`和`utf8mb4`在MySQL中有什么区别? 3. 修改MySQL字符集后,为什么还是无法插入emoji表情? 4. 如何在创建数据库时直接指定字符集?</think>### 解决 MySQL 插入中文 "Incorrect string value" 错误 #### 🔍 核心问题分析 当插入中文字符(如"活塞")时出现 `Incorrect string value` 错误,通常由以下原因导致: 1. **字符集不匹配**:表/列未使用 UTF-8 编码 2. **连接层编码错误**:客户端与服务器字符集不一致 3. **MySQL 配置问题**:默认字符集为 latin1 --- ### ✅ 完整解决方案 #### 步骤 1:检查当前字符集设置 ```sql -- 查看全局字符集设置 SHOW VARIABLES LIKE &#39;%char%&#39;; SHOW VARIABLES LIKE &#39;collation%&#39;; -- 查看具体表的字符集 SHOW CREATE TABLE 你的表名; ``` *若看到 `latin1` 或非 `utf8/utf8mb4` 字符集,需修改*[^1][^2] #### 步骤 2:修改表字符集(立即生效) ```sql -- 修改整张表的字符集 ALTER TABLE 你的表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 修改特定列的字符集 ALTER TABLE 你的表名 MODIFY 列名 VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` #### 步骤 3:修改数据库默认字符集 ```sql -- 修改现有数据库 ALTER DATABASE 你的数据库名 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 创建新数据库时指定 CREATE DATABASE 新数据库名 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` #### 步骤 4:修改 MySQL 配置文件(永久生效) 1. 打开配置文件(位置参考): - Linux: `/etc/mysql/my.cnf` 或 `/etc/my.cnf` - Windows: `my.ini`(在 MySQL 安装目录) 2. 在 `[mysqld]` 区块添加: ```ini [mysqld] character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci ``` 3. 在 `[client]` 区块添加: ```ini [client] default-character-set = utf8mb4 ``` 4. 重启 MySQL 服务: ```bash # Linux sudo service mysql restart # Windows net stop mysql && net start mysql ``` #### 步骤 5:验证字符集(重启后) ```sql SHOW VARIABLES WHERE Variable_name LIKE &#39;character%&#39; OR Variable_name LIKE &#39;collation%&#39;; ``` *预期输出*: ``` character_set_client | utf8mb4 character_set_connection | utf8mb4 character_set_database | utf8mb4 character_set_server | utf8mb4 collation_connection | utf8mb4_unicode_ci collation_database | utf8mb4_unicode_ci collation_server | utf8mb4_unicode_ci ``` #### 步骤 6:连接时指定字符集(代码层面) 在应用程序连接字符串中添加参数: ```python # Python 示例 db = pymysql.connect( host=&#39;localhost&#39;, user=&#39;user&#39;, password=&#39;pass&#39;, database=&#39;dbname&#39;, charset=&#39;utf8mb4&#39; # 关键参数 ) ``` ```java // JDBC 示例 jdbc:mysql://localhost/dbname?useUnicode=true&characterEncoding=utf8 ``` --- ### 💡 关键注意事项 1. **优先使用 `utf8mb4`** 比 `utf8` 支持更全(如 emoji 和生僻字),是 MySQL 官方推荐字符集[^2] 2. **排序规则选择** - `utf8mb4_unicode_ci`:支持多语言排序(推荐) - `utf8mb4_general_ci`:旧版排序规则 3. **修改后插入测试** ```sql INSERT INTO 你的表名 (列名) VALUES (&#39;中文测试活塞&#39;); ``` 4. **数据备份** 修改字符集前备份数据: ```sql CREATE TABLE 备份表名 SELECT * FROM 原表名; ``` --- ### ⚠️ 常见错误场景 ```sql -- 错误:只修改了表级字符集,未修改列级 ALTER TABLE table CHARSET=utf8mb4; -- 不完整! -- 正确:必须用 CONVERT TO 或逐列修改 ALTER TABLE table CONVERT TO CHARSET utf8mb4; ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天喜Studio

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值