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

Inserting a surrogate pair into MySQL with an INSERT statement

我正在尝试将代理项对('',\uD852\uDF62,与 this example 中的 U+24B62 相同)插入 MySQL .

带有未转义文字的 INSERT,由 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 的推荐方法是什么?

使用 CHARACTER SET utf8mb4,而不是 utf8utf16

参见 中的 "Best practice" 听起来您没有连接参数(或 SET NAMES)。

您尝试过的应该有效:

INSERT INTO unicode_test (value) VALUES ('');

另一种方法是

INSERT INTO unicode_test (value) VALUES (UNHEX('F0A4ADA2'));