Почему миграция Rails Active Record генерирует COLLATE utf8_bin в столбцах varchar mysql - PullRequest
2 голосов
/ 26 октября 2011

У меня работает jruby на рельсах для рельсов версии 3.0.10. Я обнаружил, что каким-то образом активная миграция записей генерирует COLLATE utf8_bin для всех столбцов varchar.
когда я делаю шоу создать таблицу пользователей:

CREATE TABLE `users` (
  `id` int(11) not null AUTO_INCREMENT default NULL,
  `email` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin not null default '',
  `remember_created_at` datetime,
  `sign_in_count` int(11) default 0,
  `current_sign_in_at` datetime,
  `last_sign_in_at` datetime,
  `current_sign_in_ip` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin default NULL,
....

У кого-нибудь есть идея, почему и как его отключить?

1 Ответ

4 голосов
/ 04 апреля 2012

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

mysql> SELECT COLLATION(VERSION());
+----------------------+
| COLLATION(VERSION()) |
+----------------------+
| utf8_general_ci      |
+----------------------+

.. или с помощью этой ..

mysql> show variables like '%collation%';
+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | utf8_general_ci   |
| collation_database   | latin1_swedish_ci |
| collation_server     | latin1_swedish_ci |
+----------------------+-------------------+

InВ вашем случае одно из этих значений должно быть utf8_bin.Общие значения для базы данных могут быть установлены в вашем файле конфигурации, вероятно, my.cnf для MySQL.Для создания таблицы MySQL с определенным механизмом, набором символов или сопоставлением можно использовать параметры миграции:

create_table :users, 
        :options => 'ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci'
        ...

Согласно документации, набор символов таблицы и сопоставление являются расширениями MySQLВ стандартном SQL нет таких вещей.

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