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

上面的错误是因为该字符需要 4 个字节才能用 UTF-8 编码表示。𓀀

默认情况下,MySQL 数据库和表是使用具有 3 字节编码的 UTF-8 创建的。您可以使用语句查看用于表的编码,如下所示: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 或不能存储包含 UTF-8 4 字节字符的字符串值。utf8``utf8mb3

要存储值,您需要使用字符集。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 应为您的数据库使用编码和排序规则。如果看到 或 ,则可能使用的是低于 8 的 MySQL 版本(MySQL 版本 5 可能默认为 )。utf8mb4``utf8``utf8mb3``utf8mb3

遇到此错误时,请注意要插入到数据库中的字符。

它们可能看起来像普通字符,但是如果您从某个来源复制并粘贴它们,那么它们可能会附加一个奇怪的编码。

例如,哥特字母SAUIL看起来像一个普通的大写字母,但实际上是一个字符:𐍃``S``4-bytes

INSERT INTO Test VALUES('𐍃');

ERROR 1366 (HY000): 
Incorrect string value: '\xF0\x90\x8D\x83' for column 'names' at row 1

或者,您也可以将十六进制代码(在上面的例子中)传递给 Google,以查找导致错误的确切字符。\xF0\x90\x8D\x83

总而言之,当MySQL由于编码不兼容而无法将您指定的值插入表中时,就会发生这种情况。ERROR 1366: Incorrect string value

您需要修改或删除具有 UTF-8 编码的字符,或者您可以更改 MySQL 使用的编码和排序规则。4-bytes

请注意,在 MySQL 中总是引用 .utf8``utf8mb3

要使用 UTF-8 编码,需要将其指定为 .4-bytes``utf8mb4

有了这些信息,您现在应该能够解决此错误。如果需要👍,请随时使用上面提供的语句ALTER

文章转自:
https://sebhastian.com/mysql-incorrect-string-value/
翻译工具:Microsoft Edge Translate

posted @   liuada  阅读(1009)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示