Hed*_*ana 44 mysql ruby-on-rails primary-key mysql2
当我尝试使用Mysql2作为数据库管理器在Rails中运行以下代码时:
rake db:migrate
我收到以下错误:
 rake aborted!
 "Mysql2::Error: All parts of a PRIMARY KEY must be NOT NULL:"
如果默认情况下表中的主键不是"null",为什么会出现此错误?
但是,迁移代码:
class CreateUsers < ActiveRecord::Migration
   def change
    create_table :users do |t|
     t.string "first_name"
     t.timestamps
    end
   end 
end
小智 84
我之前遇到过同样的问题,我根据这里解决了 https://github.com/rails/rails/pull/13247#issuecomment-32425844
使用Rails 2.3.5,MySQL版本5.7.9和mysql gem,您需要将此位作为config/initializers/abstract_mysql_adapter.rb中的初始化程序:
Run Code Online (Sandbox Code Playgroud)class ActiveRecord::ConnectionAdapters::MysqlAdapter NATIVE_DATABASE_TYPES[:primary_key] = "int(11) auto_increment PRIMARY KEY" end对于mysql2,它应该是config/initializers/abstract_mysql2_adapter.rb:
Run Code Online (Sandbox Code Playgroud)class ActiveRecord::ConnectionAdapters::Mysql2Adapter NATIVE_DATABASE_TYPES[:primary_key] = "int(11) auto_increment PRIMARY KEY" end
Tho*_*mas 29
从mysql 5.7破解更改页面:
PRIMARY KEY中的列必须为NOT NULL,但如果显式声明为NULL则不会产生错误.现在发生错误.例如,拒绝诸如CREATE TABLE t(i INT NULL PRIMARY KEY)之类的语句.类似的ALTER TABLE语句也是如此.(Bug#13995622,Bug#66987,Bug#15967545,Bug#16545198)
MySQL 5.7.3的变化(2013-12-03,里程碑13)
这个问题已于 3个月前修复.我不知道它将成为什么Rails版本
猴子补丁在这里
编辑: 这个修复程序合并到master中已经有一年多了.因此,它必须是Rails最后版本的一部分.
编辑: 
确实,修复此问题的提交可以在以下网址找到:https://github.com/yahonda/rails/commit/b6655885ef13cf8d1705dc9b5232846f0207febd,并显示修复程序包含在中v4.2.0.beta1, v4.1.6.rc1, v4.1.5, v4.1.4, v4.1.3, v4.1.2, v4.1.2.rc3, v4.1.2.rc2, v4.1.2.rc1, v4.1.1, v4.1.0, v4.1.0.rc2, v4.1.0.rc1, v4.1.0.beta2, v4.1.0.beta1.如果升级到至少v4.1.0是一个选项,那么它应该解决问题.