1

我正在尝试将代理对('', ,与本示例\uD852\uDF62中的相同)插入MySQLU+24B62

AnINSERT带有未转义的文字,由this answer建议:

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的推荐方法是什么?

4

1 回答 1

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'));
于 2017-08-13T23:20:45.880 回答