DrC*_*mal 4 mysql migration activerecord ruby-on-rails
我已经在rails版本3.0.10的rails上运行了jruby。我发现活动记录迁移以某种方式在所有varchar列上生成COLLATE utf8_bin。
当我进行表演时,创建表用户:
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,
....
Run Code Online (Sandbox Code Playgroud)
任何人都知道为什么以及如何将其关闭?
的utf8_bin核对是用来在区分大小写模式由每个字符的二进制值比较字符串。这可能取决于您使用哪种字符集或排序规则的数据库本地设置。例如,对于一个MySQL数据库,您可以通过以下MySQL命令检查MySQL数据库的排序模式。
mysql> SELECT COLLATION(VERSION());
+----------------------+
| COLLATION(VERSION()) |
+----------------------+
| utf8_general_ci |
+----------------------+
Run Code Online (Sandbox Code Playgroud)
..或使用这个
mysql> show variables like '%collation%';
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | utf8_general_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
Run Code Online (Sandbox Code Playgroud)
在您的情况下,这些值之一应为utf8_bin。可以在配置文件中设置数据库的常规值,可能my.cnf是MySQL。为了创建具有特定引擎,字符集或排序规则的MySQL表,您可以使用迁移选项:
create_table :users,
:options => 'ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci'
...
Run Code Online (Sandbox Code Playgroud)
根据文档,表字符集和排序规则是MySQL扩展,标准SQL中没有这样的东西。