首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql2 2::Error:主键的所有部分必须为非空;如果在键中需要空,则使用唯一

Mysql2 2::Error:主键的所有部分必须为非空;如果在键中需要空,则使用唯一
EN

Stack Overflow用户
提问于 2016-11-23 07:17:03
回答 4查看 13.8K关注 0票数 13

我在rails 3.2.9ruby versiion 2.0.0中创建了一个演示应用程序。在搭建博客模型之后,我尝试迁移它,但是有以下问题。

rake :迁移====================================================:== CreateBlogs:迁移 -- create_table(:blogs) rake流产了! StandardError:发生了一个错误,所有以后的迁移都取消了: Mysql2 2::Error:主键的所有部分必须为非空;如果键中需要NULL,则使用UNIQUE : CREATE blogs (id int(11)默认空auto_increment主键、title varchar(255)、description text、created_at datetime NULL ),( /usr/local/rvm/gems/ruby-2.0.0-p648@demo-app/gems/activerecord-3.2.9/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:245:in‘/usr/local/rvm/gems/ruby-2.0.0-p648@demo-app/gems/activerecord-中的updated_at日期时间NULL) ENGINE=InnoDB ENGINE=InnoDBquery' /usr/local/rvm/gems/ruby-2.0.0-p648@demo-app/gems/activerecord-3.2.9/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:245:in

……

……

……

-3.2.9/lib/active_record/迁移.db:551:在“/usr/local/rvm/gems/ruby-2.0.0-p648@demo-app/gems/rake-11.3.0/exe/rake:27:in `”任务中的migrate' /usr/local/rvm/gems/ruby-2.0.0-p648@demo-app/gems/activerecord-3.2.9/lib/active_record/railties/databases.rake:179:in块中(2个级别):TOP => db:=>迁移(参见通过使用-- trace运行任务来完成跟踪)

EN

回答 4

Stack Overflow用户

发布于 2016-11-23 07:36:39

添加此初始化程序以修复此问题:

config/initializers/abstract_mysql2_adapter.rb

代码语言:javascript
复制
require 'active_record/connection_adapters/mysql2_adapter'

class ActiveRecord::ConnectionAdapters::Mysql2Adapter
    NATIVE_DATABASE_TYPES[:primary_key] = "int(11) auto_increment PRIMARY KEY"
end
票数 52
EN

Stack Overflow用户

发布于 2020-01-22 07:50:46

我也遇到了这个问题(mysql 0.3.21和Rails 3.2.22.5)。我通过在我的应用程序config/initializers/mysql2_adapter.rb中添加一个文件(因为以前没有这样的文件)来修正它,其内容如下:

代码语言:javascript
复制
require 'active_record/connection_adapters/mysql2_adapter'
class ActiveRecord::ConnectionAdapters::Mysql2Adapter
  NATIVE_DATABASE_TYPES[:primary_key] = "int(11) auto_increment PRIMARY KEY"
end

然后,在我的environment.rb文件中,我添加了以下内容:

代码语言:javascript
复制
require File.expand_path('../initializers/mysql2_adapter', __FILE__)
票数 3
EN

Stack Overflow用户

发布于 2019-11-08 10:22:01

使用主键列定义 null时发生此错误。

即使您定义了任何组合键,那么这些列定义也不包含not null条件。

搜索那些列,删除 null条件,这是删除错误的解决方案之一。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40758226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档