为什么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或collation的数据库的本地设置。 例如,对于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中没有这样的东西。