【问题标题】:COLLATE=utf8_unicode_ci getting removed from schema.rb after migrate迁移后从 schema.rb 中删除 COLLATE=utf8_unicode_ci
【发布时间】:2018-06-20 15:58:13
【问题描述】:

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

对于我需要更改什么配置以自动生成该位有什么想法吗?

【问题讨论】:

  • 你有没有想过这个问题?
  • @stephenmurdoch 很遗憾没有

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


【解决方案1】:

我遇到了这个问题,并通过将encodingcollation 设置添加到我的database.yml 配置文件中来解决它。

我想知道您的是否因为它们是 MySQL 默认值而被忽略。您应该尝试使用 utf8mb4utf8mb4_unicode_ci,另外还有一个好处是它们支持 4 字节字符,例如某些表情符号字符。

这是我的database.yml 文件的default 部分供参考:

default: &default
  adapter: mysql2
  encoding: utf8mb4
  collation: utf8mb4_unicode_ci
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password:

【讨论】:

    猜你喜欢
    • 2013-01-09
    • 1970-01-01
    • 2011-07-10
    • 2022-01-13
    • 2011-12-12
    • 2021-12-26
    • 2013-12-26
    • 2021-11-18
    • 2013-10-10
    相关资源
    最近更新 更多