Mac M1 Pro用Homebrew重装MySQL后Rails 7出现KeyError求助
问题原因及解决方向
1. mysql2 gem版本不兼容MySQL 8.3
MySQL 8.3对数据库协议的字段元数据解析做了细微调整,部分旧版本的mysql2 gem(比如0.5.5以下版本)处理时会保留字段名末尾的空字节(\x00\x00)。Rails代码里用:Field符号去匹配哈希键,但实际返回的键是带空字节的:"Field\x00\x00",直接触发KeyError。
解决方式:
- 修改Gemfile,指定安装
mysql2最新稳定版:gem 'mysql2', '>= 0.5.6' - 执行
bundle install,让gem重新编译适配。
2. M1架构下mysql2 gem编译路径错误
Mac M1是arm64架构,Homebrew安装的MySQL默认是arm版本。如果之前的mysql2 gem是通过Rosetta兼容模式编译,或者编译时没有正确指向Homebrew的MySQL配置文件,会导致字段解析逻辑异常。
解决方式:
- 先卸载旧的
mysql2gem:gem uninstall mysql2 - 配置bundle指向Homebrew的MySQL路径后重新安装:
bundle config set mysql2 --with-mysql-config=$(brew --prefix mysql)/bin/mysql_config bundle install
3. 数据库编码配置不匹配
MySQL 8.3默认字符集为utf8mb4,如果Rails的database.yml里编码设置和数据库端不一致,可能导致字段名返回时携带额外空字节。
解决方式:
- 检查
config/database.yml的编码配置,确保和MySQL端一致:development: adapter: mysql2 encoding: utf8mb4 collation: utf8mb4_unicode_ci # 其他数据库连接配置... - 重启Rails服务器后测试。
内容的提问来源于stack exchange,提问作者Tintin81
相关产品推荐
相关产品推荐

