如何使用特定的COLLATE创建迁移?

问题描述 投票:0回答:1

我最近在开发机器上升级了Ubuntu,其中包括更新的MySQL版本8。

因此,在运行迁移时,由于段错误,我不得不碰到mysql2 gem。由于ActiveRecord,它以前被固定在< 0.5上,当时使用的是mysql2 gem的较新版本。

问题是,当我运行迁移时,schema.rb包含not being compatiblecreate_tableCOLLATE。在MySQL 8上,这在本地很好,但是在CI或生产服务器上不支持,因为它们运行的​​是旧版MySQL:

utf8mb4_0900_ai_ci

升级到MySQL 8之前, Mysql2::Error: Unknown collation: 'utf8mb4_0900_ai_ci' 不存在,只是COLLATE

CHARSET

在我的database.yml中,我将编码指定为- create_table "tasks", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", force: :cascade do |t| + create_table "tasks", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci", force: :cascade do |t| ,也可以指定utf8mb4吗?

ruby-on-rails ruby-on-rails-5 rails-activerecord mysql2
1个回答
0
投票

您可以在database.yml中指定COLLATE

COLLATE

您可以找到您现有的数据库归类,如下所示:

adapter: mysql2
  encoding: utf8mb4
  collation: utf8mb4_unicode_ci

或特定表:

use my_app_production;
SELECT @@character_set_database, @@collation_database;

顺便说一句,当指定排序规则时,随着segfault的消失,也无需碰撞mysql2 gem。

© www.soinside.com 2019 - 2024. All rights reserved.