文章内容

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"

2、(1366, "Incorrect string value: '\\xE5\\xBB\\xBA\\xE7\\xAD\\x91...' for column 'classification_name' at row 1")

3、解决mysql插入数据时出现Incorrect string value: '\xF0\x9F...' for column 'name' at row 1的异常

4、Cannot change column 'b_name': used in a foreign key constraint 'material_product_ibfk_1' of table 'Material_Development.material_product'

5、MySQL 查询排序

分享到:

发表评论

评论列表