我最近在我的开发机器上升级了Ubuntu,其中包括一个更新版本的MySQL,版本8。
因此,在运行迁移时,由于段错误,我不得不增加mysql2 gem。它之前由于ActiveRecord而被固定在< 0.5上,当时,not being compatible使用较新版本的mysql2 gem。
问题是,当我运行迁移时,schema.rb包含COLLATE为utf8mb4_0900_ai_ci的create_table。这在MySQL 8上本地运行良好,但在CI或生产服务器上不受支持,因为它们运行的是较旧版本的MySQL:
Mysql2::Error: Unknown collation: 'utf8mb4_0900_ai_ci'在升级到MySQL 8之前,COLLATE不存在,只有CHARSET
- 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|在我的database.yml中,我将编码指定为utf8mb4,有没有办法也指定COLLATE?
发布于 2019-11-19 17:50:29
您可以在database.yml中指定COLLATE:
adapter: mysql2
encoding: utf8mb4
collation: utf8mb4_unicode_ci您可以按如下方式查找现有的数据库排序规则:
use my_app_production;
SELECT @@character_set_database, @@collation_database;或特定表:
SHOW TABLE STATUS LIKE 'users';顺便说一句,在指定排序规则时,也不需要在段错误消失时影响mysql2 gem。
发布于 2020-08-18 22:04:12
您可以更新排序规则:
ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_general_ci;https://stackoverflow.com/questions/58930916
复制相似问题