Задает ли characterEncoding в строке подключения способ хранения значений? - PullRequest
0 голосов
/ 09 мая 2019

Я собираюсь изменить кодировку для базы данных с latin1 на utf8mb4. Из-за ограничений конфиденциальности я не знаю, что содержит конвертируемая база данных. Я обеспокоен тем, что при работе ниже SQL существующие данные могут быть изменены.

ALTER TABLE table CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

Однако строка подключения из приложения grails содержит useUnicode = true & CharacterEncoding = UTF-8 , означает ли это, что хотя latin1_swedish_ci используется для столбца, фактическое значение, которое было сохранено, равно UTF- 8 закодировано?

И так как это значение кодируется в UTF-8, нет риска того, что данные будут затронуты изменением с latin1 на utf8mb4?

+--------------------------+-------------------+
| Variable_name            | Value             |
+--------------------------+-------------------+
| character_set_client     | utf8              |
| character_set_connection | utf8              |
| character_set_database   | latin1            |
| character_set_filesystem | binary            |
| character_set_results    | utf8              |
| character_set_server     | latin1            |
| character_set_system     | utf8              |
| collation_connection     | utf8_general_ci   |
| collation_database       | latin1_swedish_ci |
| collation_server         | latin1_swedish_ci |
+--------------------------+-------------------+```

1 Ответ

1 голос
/ 11 мая 2019

Это Ώπα?Это интерпретация в UTF-8 (как его называет внешний мир), utf8mb4 (эквивалент MySQL) или utf8 (частичная реализация MySQL UTF-8).

Это не будет работать хорошо в latin1.

Кодировка в клиенте и кодировка столбца в базе данных не обязательно должны совпадать.Однако греческий язык в клиенте не может быть втиснут в латиницу 1 в таблице, поэтому появляется сообщение об ошибке.

Что ALTER TABLE table CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; делает, чтобы изменить все текстовые столбцы в этой таблице для кодировки utf8 и конвертировать из любой используемой кодировки (предположительно, латиница 1).Это хорошо для западноевропейских символов, которые существуют (с разными кодировками) как в латинице 1, так и в utf8.

Чтобы справиться с эмодзи и некоторыми китайскими языками, вы также можете перейти на utf8mb4:

ALTER TABLE table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8_unicode_520_ci;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...