为什么Rails Active Record迁移会在mysql的varchar列上生成COLLATE utf8_bin

我在导轨上运行jruby for rails 3.0.10。 我发现在某个varchar列上以某种方式激活记录迁移会生成COLLATE utf8_bin。
当我做一个show create table用户时:

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, .... 

任何人都知道为什么以及如何关闭它?

utf8_bin排序规则用于比较区分大小写模式的字符串,每个字符的二进制值。 它可能取决于您使用charset或collat​​ion的数据库的本地设置。 例如,对于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 | +----------------------+-------------------+ 

在您的情况下,其中一个值应为utf8_bin 。 可以在配置文件中设置数据库的常规值,可能是my.cnf for MySQL。 要创建具有特定引擎,字符集或排序规则的MySQL表,您可以使用迁移选项:

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

根据文档, 表字符集和排序规则是MySQL扩展,标准SQL中没有这样的东西。