2011-04-21 65 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