2015-03-16 2 views
1

У меня есть коллекция рубиновых скриптов, которые обращаются к моей базе данных MySQL. Мне нужно изменить набор символов для этой базы данных, в частности изменить таблицы с Latin1 на UTF8. Нужно ли мне вообще изменять мои сценарии? Я посмотрел, и я вижу, что могу установить набор символов для подключения, является ли это обязательным?Если я изменяю набор символов базы данных MySQL, нужно ли мне изменять клиенты Ruby?

Часть моего колебания в мышлении Мне не нужно вносить какие-либо корректировки в настройку базы данных сегодня. Глядя на то, как наборы символов уже установлены:

mysql> SHOW VARIABLES LIKE "%char%"; +--------------------------+-------------------------------------------+ | 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 | | character_sets_dir | /rdsdbbin/mysql-5.6.21.R1/share/charsets/ | +--------------------------+-------------------------------------------+

не это, что клиенты уже настроены использовать набор символов UTF8?

+0

Какую библиотеку/камень вы используете для подключения к mysql? –

+0

Вы подтвердили, что данные в ваших таблицах закодированы в utf8? 'SELECT HEX (...)'. Я хочу сказать, что если у вас есть мусор в столах, исправление Ruby будет только частью вашей боли. –

ответ

1

MySQL управляет кодировками на каждого клиента и за столбец. Это означает, что каждый столбец, в котором хранится текст, имеет параметр кодирования, и каждый подключенный клиент отдельно также имеет настройку кодирования. Текстовые кодировки будут преобразованы «на лету» между этими двумя, если необходимо. Если клиент отправляет данные UTF-8, которые должны быть сохранены в столбце SJIS, MySQL сделает это преобразование автоматически (и наоборот наоборот по пути назад).

Как таковой, действительно имеет значение только то, что кодирует клиент при подключении к базе данных. Если вы не указали это явно в своем коде Ruby, вы получите неявное значение по умолчанию. Изменение кодировки столбца MySQL не будет изменять эту стандартную кодировку. Таким образом: нечего делать.

+0

Ну и кодировка столбцов тоже важна - например, если данные UTF8 от клиента содержат данные, которые не могут быть преобразованы в кодировку, используемую столбцом –

+0

Ну да, это имеет значение, поскольку оно определяет, какие символы могут быть сохранены и как эффективное хранилище. Однако это не имеет значения для клиентской кодировки. – deceze

Смежные вопросы