определить символ при миграции rails

#ruby-on-rails-3

#ruby-on-rails-3

Вопрос:

Все таблицы и поля, созданные с помощью миграции Rails, имеют latin1_swedish_ci collate. Поскольку в моем проекте используется русский язык, эта сортировка неверна.

Возможно ли использовать миграции с utf8_general_ci ?

P.S. Моя база данных.yml:

 development:
  adapter: mysql2
  encoding: utf8
  collation: utf8_general_ci
  reconnect: false
  database: my_development
  pool: 5
  username: username
  password: 'heavy'
  host: localhost
  

Ответ №1:

Вот пример указания параметров сортировки в вашей миграции:

 create_table :users, :options => 'COLLATE=utf8_general_ci' do |t|
  t.string :email
  t.timestamps
end
  

Комментарии:

1. Это помогает, но в schema.rb я вижу: «КОДИРОВКА ПО умолчанию ENGINE = InnoDB = utf8», кодировка теперь правильная, но сортировки нет.

Ответ №2:

Rails не устанавливает параметры сортировки для соединения (только для базы данных в create_database вызове). Лучшая идея здесь — установить его самостоятельно в файле конфигурации MySQL вашей системы, например. /etc/my.cnf

На самом деле я рекомендую вам сообщить MySQL, чтобы он вообще игнорировал клиентское рукопожатие, лучше, чтобы сервер сообщал клиенту, какой набор символов и параметры сортировки использовать. Соответствующие части моего MySQL conf выглядят следующим образом:

 [server]
character_set_server=utf8
collation_server=utf8_unicode_ci
skip_character_set_client_handshake
  

Если вы пойдете по этому пути, просто не забудьте сделать то же самое на сервере, на котором вы выполняете развертывание. Если вы не знаете, где находится ваш конфигурационный файл для MySQL, запустите это из командной строки: my_print_defaults | grep -A1 "Default options" Это даст вам конфигурационные файлы, которые MySQL будет искать (по порядку).

Комментарии:

1. «Не работает» не дает нам никаких оснований для продолжения. Вы добавляете это в свой, my.cnf перезапускаете mysqld , чтобы он получил новую конфу, затем выполняете create_table миграцию, и вы говорите мне, что он не был создан с помощью этой сортировки? Если это так, возможно, вам также нужно удалить и воссоздать базу данных (я не думал, что вам нужно будет это делать).

2. Нет разницы между выполнением миграций до вставки этих строк и после. Таблицы находятся в latin1_swedish_ci стороне от всех…

3. Для этого потребуется доступ на уровне администратора к серверу базы данных, а это возможно не каждый раз. Я думаю, что другой ответ был бы лучше с точки зрения разработчика.