我最近在开发机器上升级了Ubuntu,其中包括更新的MySQL版本8。
因此,在运行迁移时,由于段错误,我不得不碰到mysql2 gem。由于ActiveRecord,它以前被固定在< 0.5
上,当时使用的是mysql2 gem的较新版本。
问题是,当我运行迁移时,schema.rb包含not being compatible且create_table
为COLLATE
。在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
吗?
您可以在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。