Я пытаюсь вставить суррогатную пару ('????', \uD852\uDF62
, то же, что и U+24B62
из этот пример) в MySQL.
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?
\xF0\xA4\xAD\xA2
— это UTF-8 выражение кодаU+24b62
(или\uD852\uDF62
в UTF-16). - person JosefZ   schedule 02.08.2017