mysql - Rails change_column 错误:Mysql2::Error: COLLATION 'utf8_general_ci' 对于字符集 'binary' 无效

标签 mysql ruby-on-rails

我正在将 Rails 应用程序从 5.2.3 升级到 7.0.3。适用于旧版 Rails 的迁移在新版 Rails 上会失败。

这是迁移:

change_column :documents, :override, :json, using: 'override::JSON'

这会导致错误:

Mysql2::Error: COLLATION 'utf8_general_ci' is not valid for CHARACTER SET 'binary'

我想知道“二进制文件”来自哪里。

我已经尝试过:

ALTER DATABASE dbname CHARACTER SET utf8 COLLATE utf8_unicode_ci;

但这没有帮助。

执行“显示像 '%char%' 这样的变量;显示像 '%coll%' 这样的变量;”结果:

| character_set_client     | utf8                                      |
| character_set_connection | utf8                                      |
| character_set_database   | utf8                                      |
| character_set_filesystem | binary                                    |
| character_set_results    | utf8                                      |
| character_set_server     | latin1                                    |
| character_set_system     | utf8                                      |
| character_sets_dir       | /rdsdbbin/mysql-5.7.38.R1/share/charsets/ |
| collation_connection | utf8_general_ci   |
| collation_database   | utf8_unicode_ci   |
| collation_server     | latin1_swedish_ci |

数据库位于 AWS RDS(MySQL 社区)中。

如果有任何帮助,我将不胜感激!

最佳答案

当我尝试将列数据类型从文本更改为 JSON 时,我在 Rails 7 中遇到了相同的错误

我定义迁移中的排序规则为零

例如:

change_column :documents, :override, :json, collation: nil

关于mysql - Rails change_column 错误:Mysql2::Error: COLLATION 'utf8_general_ci' 对于字符集 'binary' 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74133160/

相关文章:

SQL时间函数

php - 来自 html 表的 mysql 帖子

mysql - 我应该使用 MySQL Cluster、Master to Master 复制还是其他?

sql - 两个表都需要使用 "where"进行 RoR 表连接

ruby-on-rails - 做 gem 规范。名称必须等于 gem 常量名称?

从 EC2 中的 MySQL 5.7 到 AWS RDS 的 mysqldump

c# - 将字符串转换为 Vector3

ruby-on-rails - Rails 通过迁移删除表行

ruby-on-rails - 将现有的 ruby​​ 添加到 RVM

ruby-on-rails - 事件记录模型中具有替代搜索的轮胎elasticsearch kaminari分页