迁移后COLLATE = utf8_unicode_ci从schema.rb中删除

时间:2018-06-20 15:58:14

标签: mysql ruby-on-rails rails-migrations

运行导轨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,删除,创建并迁移了我的数据库,但整理行仍然消失了。

是否有任何关于我需要更改以自动生成该位的想法?

1 个答案:

答案 0 :(得分:0)

我遇到了这个问题,并通过在我的encoding配置文件中添加collationdatabase.yml设置来解决了这个问题。

我想知道您的数据库是否被忽略,因为它们是MySQL的默认设置。您应该尝试使用utf8mb4utf8mb4_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: