2011-04-21 63 views
1

使用Rails迁移创建的所有表和字段都有latin1_swedish_ci collat​​e。 由于我的项目使用的是俄语,因此这种整理不合适。在rails迁移中定义字符

是否可以使用utf8_general_ci迁移?

P.S.我的database.yml:

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

回答

1

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查找的配置文件(按顺序)。

+0

不工作:(我还试图把这个线成'mysqld'块,但没有... – Kir 2011-04-21 19:51:30

+0

“不工作“并没有给我们任何东西继续,你把它添加到你的'my.cnf'中,重新启动'mysqld',以便获得新的conf,然后运行'create_table'迁移,并告诉我它是不是用这种排序规则创建的?如果是这样,也许你需要删除并重新创建数据库(我认为你不需要这样做)。 – smathy 2011-04-21 19:56:38

+0

插入这些行之前运行迁移没有区别,之后,表格在'latin1_swedish_ci'中,尽管所有... – Kir 2011-04-23 09:19:49

11

下面是迁移指定整理的例子:

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