使用 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
,而不是 utf8
或 utf16
。
参见 中的 "Best practice"
听起来您没有连接参数(或 SET NAMES
)。
您尝试过的应该有效:
INSERT INTO unicode_test (value) VALUES ('');
另一种方法是
INSERT INTO unicode_test (value) VALUES (UNHEX('F0A4ADA2'));
我正在尝试将代理项对('',\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
,而不是 utf8
或 utf16
。
参见 SET NAMES
)。
您尝试过的应该有效:
INSERT INTO unicode_test (value) VALUES ('');
另一种方法是
INSERT INTO unicode_test (value) VALUES (UNHEX('F0A4ADA2'));