mysql 1366 - Incorrect string value: '\xB1\xB1\xBE\xA9\xCA\xD0' for column '错误解决

本文详细解释了如何解决在数据库中创建的表编码问题,特别是涉及到中文字符时出现的错误。通过将相关字段的charset设置为UTF-8并collation设置为utf8_unicode_ci,可以确保数据的正确显示和检索。

这是因为的你创建的表编码存在问题

可以尝试将每一个用到中文的字段charset改成uft8 

collation改成utf8_unicode_ci



### MySQL Error 1366 Incorrect String Value解决方案 MySQL Error 1366Incorrect string value)通常出现在插入或更新包含非 ASCII 字符(如中文、表情符号等)的数据时,原因是数据库、表或列的字符集不支持这些字符。以下是详细的解决方案和分析: #### 1. 修改当前表的字符编码 如果问题仅限于特定表,可以通过修改该表的字符集来解决。推荐使用 `utf8mb4` 字符集,因为它支持更广泛的 Unicode 字符(包括表情符号)。执行以下 SQL 命令: ```sql ALTER TABLE 表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` 此命令将表的字符集更改为 `utf8mb4`,并确保所有列都支持新的字符集[^4]。 #### 2. 修改数据库的字符编码 如果问题是全局性的,可以修改整个数据库的字符集。执行以下命令: ```sql ALTER DATABASE 数据库名 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; ``` 此外,还需要确保服务器和连接的字符集也设置为 `utf8mb4`。可以通过以下命令检查和设置: ```sql SHOW VARIABLES LIKE '%character_set%'; SET character_set_client = utf8mb4; SET character_set_connection = utf8mb4; SET character_set_results = utf8mb4; SET character_set_server = utf8mb4; ``` 这些设置确保从客户端到服务器的所有通信都使用 `utf8mb4` 编码[^4]。 #### 3. 创建数据库时指定字符编码 为了避免后续出现类似问题,建议在创建数据库时就指定正确的字符集: ```sql CREATE DATABASE 数据库名 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` 这样可以确保数据库中的所有表和列默认使用 `utf8mb4` 字符集。 #### 4. 检查和修正数据源 如果问题仍然存在,可能是数据源本身存在问题(例如编码不正确或包含无效字符)。可以在插入数据前进行清理或验证。例如,使用 PHP 时可以执行以下代码: ```php if (mb_check_encoding($data, 'UTF-8') && !preg_match('/[\x00-\x08\x0B\x0C\x0E-\x1F]/', $data)) { // 数据有效,继续处理 } else { // 数据无效,进行清理或记录日志 } ``` 此外,还可以尝试将数据转换为 `utf8mb4`: ```php $data = mb_convert_encoding($data, 'UTF-8', 'auto'); ``` #### 5. 验证表结构 某些情况下,错误可能与列的数据类型有关。例如,`VARCHAR` 或 `TEXT` 类型可能无法存储较大的字符串。可以将列的数据类型更改为 `LONGTEXT` 或其他适合的类型[^3]。 --- ### 示例代码 以下是一个完整的示例,展示如何修改表的字符集并插入包含中文和表情符号的数据: ```sql -- 修改表字符集 ALTER TABLE char_test CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 插入测试数据 INSERT INTO char_test(sno, sname) VALUES(1, '张三😊'); ``` --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值