Кодировка сервера Mysql отличается от кодировки клиента (latin1 vs utf8mb4). Насколько плохо?

0

Я разрабатываю веб-приложение php и испытываю трудности с пониманием значения переменных Mysql, связанных с кодированием, и того, как они взаимодействуют друг с другом. Кодировка сервера установлена на latin1, но клиент - utf8mb4.

Запуск запроса mysql внутри базы данных

SHOW VARIABLES
WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%'

дает следующее:

character_set_client = utf8mb4
character_set_connection = utf8mb4
character_set_database = latin1
character_set_filesystem = binary
character_set_results = utf8mb4
character_set_server = latin1
character_set_system = utf8
collation_connection = utf8mb4_unicode_ci
collation_database = latin1_swedish_ci
collation_server = latin1_swedish_ci

Я боюсь столкнуться с проблемами со старыми базами данных, которые находятся в latin1, если я изменю набор символов сервера mysql на utf8mb4, но я, конечно, хочу использовать utf8mb4 для новых создаваемых баз. Чтобы правильно обслуживать и извлекать данные из базы данных, должны ли кодировки и сопоставления серверов и клиентов всегда быть одинаковыми? Любое понимание было бы оценено?

Теги:
encoding

1 ответ

0

Некоторые из этих VARIABLES должны соглашаться с тем, какая кодировка используется в клиенте.

CREATE TABLE... указывает, как они должны храниться в таблицах.

Если эти два отличаются друг от друга, то MySQL преобразует "на провод" между клиентским кодированием кодировки таблицы.

Если это означает преобразование, скажем, корейских символов (кодирование в utf8 или utf8mb4) в латинскую кодировку, это будет невозможно. С другой стороны, все акцентированные буквы в Западной Европе имеют кодировки как в latin1, так и в utf8, поэтому проблем нет.

Прочтите это для общих неприятностей: проблема с символами UTF-8; я не вижу того, что я хранил

См. ALTER TABLE.. CONVERT TO.. для преобразования всех столбцов символов в одной таблице в другую кодировку (при условии, что она была правильно сохранена для начала).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню