我试图将代理对('',\uD852\uDF62
,与this example中的U+24B62
相同)插入 MySQL
由this answer建议的INSERT
带有非转义文字的文字:
INSERT INTO unicode_test (value) VALUES ('');
-- or
INSERT INTO unicode_test (value) VALUES (_utf8'');
失败
Error Code: 1366. Incorrect string value: '\xF0\xA4\xAD\xA2' for column 'value' at row 1
(请注意,\xF0\xA4\xAD\xA2
甚至不接近\uD852\uDF62
的原始值。
另一方面,两者
INSERT INTO unicode_test (value) VALUES (_utf16'');
和
INSERT INTO unicode_test (value) VALUES (_utf8mb4'');
成功,但插入的值与原始值不同。
我的数据库使用utf8mb4
字符集,所以我认为它应该透明地处理代理。
将非BMP字符插入 MySQL 的推荐方法是什么?
答案 0 :(得分:1)
使用CHARACTER SET utf8mb4
,而不是utf8
或utf16
。
参见"最佳实践"在http://stackoverflow.com/questions/38363566/trouble-with-utf8-characters-what-i-see-is-not-what-i-stored
听起来你没有连接参数(或SET NAMES
)。
你尝试过的应该是有效的:
INSERT INTO unicode_test (value) VALUES ('');
另一种方法是
INSERT INTO unicode_test (value) VALUES (UNHEX('F0A4ADA2'));