使用INSERT语句将代理项对插入MySQL

时间:2017-08-02 10:21:16

标签: mysql sql unicode surrogate-pairs

我试图将代理对('',\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 的推荐方法是什么?

1 个答案:

答案 0 :(得分:1)

使用CHARACTER SET utf8mb4,而不是utf8utf16

参见"最佳实践"在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'));