运行导轨5.0.2
源代码控制中schema.rb中的表似乎大多数具有以下格式:create_table "app_files", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci" do |t|
。请注意最后的COLLATE=utf8_unicode_ci"
。
当我运行迁移时,生成的schemaa.rb
基本上是相同的,但是从这些行中剔除了COLLATE=utf8_unicode_ci"
,所以现在看起来像create_table "app_files", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
基于其他SO帖子,我尝试了两件事来解决此问题
1)在我添加的/etc/mysql/my.cnf中
[mysqld]
character-set-server = utf8
collation-server = utf8_unicode_ci
2)在我的database.yml
中将collation: utf8_general_ci
添加到了所有相关环境
然后我重新启动mysql,删除,创建并迁移了我的数据库,但整理行仍然消失了。
是否有任何关于我需要更改以自动生成该位的想法?
答案 0 :(得分:0)
我遇到了这个问题,并通过在我的encoding
配置文件中添加collation
和database.yml
设置来解决了这个问题。
我想知道您的数据库是否被忽略,因为它们是MySQL的默认设置。您应该尝试使用utf8mb4
和utf8mb4_unicode_ci
,它们的额外好处是它们支持4字节字符,例如某些表情符号字符。
这是我的default
文件的database.yml
部分供参考:
default: &default
adapter: mysql2
encoding: utf8mb4
collation: utf8mb4_unicode_ci
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password: