MySQL 报错:Incorrect string value
当我们在使用 MySQL 数据库的时候,有时候可能会遇到以下错误信息:
Error Code: 1366. Incorrect string value: '\xE6\xA0\x87\xE9\xA2\x98...' for column 'column_name' at row ...
出现这个错误的原因是因为我们在插入或更新数据时,字符串的编码格式和数据库表格的编码格式不一致。
为了解决这个问题,我们需要根据错误信息,找到出错的字段。在上面的错误信息中,“column_name”指的就是出现问题的字段名,我们需要检查这个字段的编码格式是否和数据库表格的编码格式一致。
阅读更多:MySQL 教程
检查编码格式
首先,我们需要了解 MySQL 字符集和编码的概念。
MySQL 中,字符集是一组可以用来支持各种文字的编码方法,比如:ASCII、UTF-8、GBK等。而编码则是字符集的一种具体实现方式,例如:UTF-8、UTF-16、GB2312 等。
我们可以使用以下命令,查看数据库的默认字符集和编码:
SHOW VARIABLES LIKE '%character_set%';
结果会返回如下信息:
+--------------------------+----------------------------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql-8.0.21-macos10.15-x86_64/share/charsets/ |
+--------------------------+----------------------------------------------------------+
注意,这里的字符集必须包含当前出错的字段所使用的字符集。
接下来,我们可以使用以下命令,查看一个表格的默认字符集和编码:
SHOW CREATE TABLE table_name;
结果会返回如下信息:
CREATE TABLE `table_name` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`column_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
注意,这里的字符集必须与数据库的字符集相同,否则就会出现错误。
修改编码格式
如果出现编码格式不一致的情况,我们就需要通过以下步骤来修改编码格式:
- 修改字段的编码格式:
ALTER TABLE table_name MODIFY COLUMN column_name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
注意,这里的字符集必须包含当前出错的字段所使用的字符集。
- 修改表格的编码格式:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
注意,这里的字符集必须与数据库的字符集相同,否则就会出现错误。
总结
以上就是修复 MySQL 报错:Incorrect string value 的方法,我们需要首先检查编码格式,然后根据需要修改字段或表格的编码格式,以避免出现不必要的错误。在实际开发中,我们还可以根据具体的情况,选择适当的字符集和编码方式,来进行数据存储和处理,从而更好地维护和优化我们的数据库系统。
极客教程