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

And*_*rew 10 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
Run Code Online (Sandbox Code Playgroud)

2)在我的database.ymlive中添加collation: utf8_general_ci到所有相关环境中

然后我重新启动了mysql,删除,创建并迁移了我的数据库,但整理线仍然消失了.

有关我需要更改哪些配置以使该位自动生成的任何想法?

Jon*_*Jon 3

我遇到了这个问题,并通过在配置文件中添加encodingcollation设置来解决它database.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:
Run Code Online (Sandbox Code Playgroud)