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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix