RAJ*_*WAN 4 mysql mysql-workbench mysql-5.7
我的表结构面临问题:
创建表`My_Table_Name1`( `twitter_id_str` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `twitter_screen_name` varchar(512) COLLATE utf8mb4_unicode_ci DEFAULT NULL, 唯一键`twitter_id_str`(`twitter_id_str`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
对于数据库,我也有相同的字符集和排序规则:
CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
我正在尝试在此表中插入一个表情符号:
insert into My_Table_Name1 values("2","")
Run Code Online (Sandbox Code Playgroud)
但是,我收到一个错误:
错误代码:1366。不正确的字符串值:'\xF0\x9F\x98\x80' 列 'twitter_screen_name' 在第 1 行 0.00027 秒
如何解决这个问题?
提前致谢。
问题似乎出在客户端。
当客户端连接到 MySQL 服务器时,需要声明客户端中的字节为utf8mb4
. 这可以通过多种方式完成:
SET NAMES utf8mb4
.\U+1F600
是该表情符号的 Unicode 表示。
\xF0\x9F\x98\x80
是等效的十六进制。
F09F9880
是十六进制的 UTF-8 (utf8mb4)。
避免 Unicode 表示。
这似乎是 mysql-workbench 的问题(在 Fedora 和 MySQL 5.7 (CentOS) 上使用版本 6.3.9 进行测试),其中表情符号未转换为正确的 unicode。
在命令行mysql
客户端中,表情符号在粘贴时会转换为代码,因此查询
INSERT INTO My_Table_Name1 values("2","");
Run Code Online (Sandbox Code Playgroud)
变成:
INSERT INTO My_Table_Name1 values("4","\U+1F600");
Run Code Online (Sandbox Code Playgroud)
效果很好。
但是在mysql-workbench中,粘贴表情符号时并没有转换,查询结果为:
错误代码:1366。第 1 行的“twitter_screen_name”列的字符串值不正确:“\xF0\x9F\x98\x80”