Неверное строковое значение для символа Cangjie с использованием сортировки MySQL utf8 (поддержка 4 байтов) - PullRequest
0 голосов
/ 07 июня 2018

У меня есть приложение, которое сохраняет пользовательский ввод в таблицу в моей базе данных.Первоначально база данных была настроена на utf8 (MySQL v5.7), но после прочтения было высказано предположение, что MySQL поддерживает только 3 байта с их сопоставлением utf8 и что для поддержки 4 байтов необходимо обновление до utf8mb4.

I 'В настоящее время я выполняю некоторое тестирование, сохраняя текст в Cangjie, и по большей части это выглядит нормально, однако при попытке сохранить следующий символ '?' я получаю следующую ошибку:

'Incorrect string value: \'\\xF0\\xA4\\x8D\\xA2\\xE5\\x8F...\' for column \'content\' at row 1'

Я обновился до utf8mb4на уровне базы данных, таблицы и столбца, но все еще видел ошибку.

Я попытался вручную вставить содержимое на уровне БД (а не через приложение) и получил ту же ошибку, так что я знаю, что это не такпроблема реализации.

Может кто-нибудь предложить причину, почему это может иметь место?Я думал, что utf8mb4 покрыл бы это

1 Ответ

0 голосов
/ 07 июня 2018

РЕШЕНО: Я использовал следующий набор команд (измененный в соответствии с моими потребностями) для обновления параметров сортировки по умолчанию: Источник: https://mathiasbynens.be/notes/mysql-utf8mb4

# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = 
utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE 
utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) 
CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the 
column type, maximum length, and other properties. The above line is 
just an example for a `VARCHAR` column.)

Это само по себе не работало, мне также пришлось сделатьэто необходимо для обновления ряда глобальных переменных, таких как character_set_client, character_set_connection и т. д.:

set names utf8mb4 collate utf8mb4_unicode_ci;

Это было только для соединения, которое у меня было открыто для базы данных.Код на стороне клиента фактически работает после первоначального обновления набора символов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...