在Rails中创建主键的表和问题

Hed*_*ana 44 mysql ruby-on-rails primary-key mysql2

当我尝试使用Mysql2作为数据库管理器在Rails中运行以下代码时:

rake db:migrate
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

 rake aborted!
 "Mysql2::Error: All parts of a PRIMARY KEY must be NOT NULL:"
Run Code Online (Sandbox Code Playgroud)

如果默认情况下表中的主键不是"null",为什么会出现此错误?

但是,迁移代码:

class CreateUsers < ActiveRecord::Migration
   def change
    create_table :users do |t|
     t.string "first_name"
     t.timestamps
    end
   end 
end
Run Code Online (Sandbox Code Playgroud)

小智 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中的初始化程序:

class ActiveRecord::ConnectionAdapters::MysqlAdapter
  NATIVE_DATABASE_TYPES[:primary_key] = "int(11) auto_increment PRIMARY KEY"
end
Run Code Online (Sandbox Code Playgroud)

对于mysql2,它应该是config/initializers/abstract_mysql2_adapter.rb:

class ActiveRecord::ConnectionAdapters::Mysql2Adapter
  NATIVE_DATABASE_TYPES[:primary_key] = "int(11) auto_increment PRIMARY KEY"
end
Run Code Online (Sandbox Code Playgroud)


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是一个选项,那么它应该解决问题.