文章内容
2023/5/19 16:28:27,作 者: 黄兵
MySQL - 如何修复 Incorrect string value 错误
当您尝试向MySQL数据库表插入新记录时,您可能会遇到一个错误,其中包含描述的UTF-8十六进制代码,错误消息为"Incorrect string value"。
例如,假设您创建了一个名为Test的表,只有一个列,如下所示:
CREATE TABLE `Test` ( `names` varchar(255) )
接下来,让我们将以下埃及象形文字字符插入到表中:
INSERT INTO Test VALUES('𓀀');
您的MySQL服务器可能会返回以下错误:
ERROR 1366 (HY000): Incorrect string value: '\xF0\x93\x80\x80' for column 'names' at row 1
上述错误是因为字符𓀀在UTF-8编码中需要4个字节来表示。
默认情况下,MySQL数据库和表使用UTF-8编码,其中每个字符占用3个字节。您可以通过使用以下SHOW CREATE TABLE语句来查看表使用的编码:
SHOW CREATE TABLE Test \G
这是我电脑上的结果:
*************************** 1. row *************************** Table: Test Create Table: CREATE TABLE `Test` ( `names` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3
正如您所看到的,该表使用了DEFAULT CHARSET=utf8mb3,而names列使用了CHARACTER SET utf8。
MySQL的utf8或utf8mb3不能存储包含UTF-8 4字节字符的字符串值。
要存储这些值,您需要使用utf8mb4字符集。
以下是将您的数据库、表或列更改为utf8mb4字符集的查询语句:
-- Change a database ALTER DATABASE [database_name] CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; -- Change a table ALTER TABLE [table_name] CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- Change a column ALTER TABLE [table_name] CHANGE [column_name] [column_name] VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
当您在数据库级别更改字符集时,将来为该数据库创建的任何新表都将使用该字符集作为默认编码。
回到Test表,您可以只更改names列以使INSERT语句正常工作:
ALTER TABLE `Test` CHANGE `names` `names` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
现在,您应该能够将字符𓁴插入到表中了:
INSERT INTO Test VALUES('𓁴'); -- Query OK, 1 row affected (0.00 sec)
默认情况下,MySQL 8版本应该为您的数据库使用utf8mb4编码和排序规则。如果您看到的是utf8或utf8mb3,那么您可能使用的是低于MySQL 8的版本(MySQL 5版本可能默认为utf8mb3)。
当遇到这个错误时,请注意要插入到数据库中的字符。
它们可能看起来像普通字符,但如果您从某个来源复制粘贴它们,那么它们可能带有奇怪的编码。
例如,哥特字母SAUIL 𐍃 看起来像普通的大写字母S,但实际上是一个4字节的字符:
INSERT INTO Test VALUES('𐍃'); ERROR 1366 (HY000): Incorrect string value: '\xF0\x90\x8D\x83' for column 'names' at row 1
另外,您还可以将上述示例中的十六进制代码(\xF0\x90\x8D\x83)输入到谷歌中,以查找导致错误的确切字符。
总结一下,错误代码1366(ERROR 1366: Incorrect string value)表示MySQL无法将指定的值插入表中,原因是由于不兼容的编码。
您需要修改或删除具有4字节UTF-8编码的字符,或者可以更改MySQL使用的编码和排序规则。
请注意,MySQL中的utf8始终指的是utf8mb3。
要使用4字节UTF-8编码,需要将其指定为utf8mb4。
有了这些信息,您现在应该能够解决这个错误了。如果需要,随时使用上面提供的ALTER语句进行修改👍
文章来源:
MySQL - How to fix the 'Incorrect string value' error
其它相关推荐:
1、1366, "Incorrect string value: '\\xE9\\xBB\\x84\\xE5\\x85\\xB5' for column 'fullname' at row 1"
3、解决mysql插入数据时出现Incorrect string value: '\xF0\x9F...' for column 'name' at row 1的异常
评论列表