Creating tables and problems with primary key in Rails Creating tables and problems with primary key in Rails ruby-on-rails ruby-on-rails

Creating tables and problems with primary key in Rails


I had a same problem before, and I solved according to herehttps://github.com/rails/rails/pull/13247#issuecomment-32425844

With Rails 2.3.5, MySQL version 5.7.9 and mysql gem you need to have this bit as an initializer in config/initializers/abstract_mysql_adapter.rb:

class ActiveRecord::ConnectionAdapters::MysqlAdapter  NATIVE_DATABASE_TYPES[:primary_key] = "int(11) auto_increment PRIMARY KEY"end

For mysql2, it should be config/initializers/abstract_mysql2_adapter.rb:

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


From the mysql 5.7 breaking change page:

Columns in a PRIMARY KEY must be NOT NULL, but if declared explicitly as NULL produced no error. Now an error occurs. For example, a statement such as CREATE TABLE t (i INT NULL PRIMARY KEY) is rejected. The same occurs for similar ALTER TABLE statements. (Bug #13995622, Bug #66987, Bug #15967545, Bug #16545198)

Changes in MySQL 5.7.3 (2013-12-03, Milestone 13)

This issue was fixed 3 months ago. I don't know what Rails version it's going to be part of

monkey patch is here

EDIT:It's been more than a year that this fix was merged into master. So, it must be part of the last version of Rails.

EDIT:Indeed, the commit that fixes this can be found at: https://github.com/yahonda/rails/commit/b6655885ef13cf8d1705dc9b5232846f0207febd , and shows that the fix is included in 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. If upgrading to at least v4.1.0 is an option for you, then it should fix the problem.


I had this issue running a rails 4.0.x app using mysql 5.7.x. I was able to fix it by upgrading to rails 4.2.x and upgrading my gems.

(I'm sure these gemfiles need work, but hopefully they are still helpful)

Old Gemfile

source 'https://rubygems.org'ruby '2.0.0'# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'gem 'rails', '4.0.13'gem 'mysql2'# Use unicorn as the app server# gem 'unicorn'gem 'sidekiq'gem 'sinatra'gem 'whenever'gem 'thin'gem 'faye'gem 'faye-websocket'#pdf generationgem 'wicked_pdf'gem 'wkhtmltopdf-binary'# Assetsgem 'backbone-on-rails', '~> 0.9.9'gem 'coffee-rails', '~> 4.0.1'gem 'coffee-script-source', '=1.8.0'gem 'ejs'                                   # uses templates for backbonegem 'jquery-rails'gem 'jquery-ui-rails'gem 'neat'gem 'sass-rails', '~> 4.0.3'gem 'therubyracer'gem 'turbolinks'gem 'uglifier', '>= 1.3.0'gem 'active_model_serializers', '0.8.3'gem 'acts_as_list'gem 'bcrypt-ruby', '~> 3.1.2'gem 'bootstrap-sass', '~> 3.2.0.0'gem 'bower-rails'gem 'carrierwave'gem 'enumerize'gem 'embedly'                         # Url to Attachment Processinggem 'fancybox2-rails', '~> 0.2.4'gem 'flamegraph'gem 'fog'                     # s3 storagegem 'globalize'   # I18n for tagging, etc.gem 'globalize-accessors'gem 'i18n-tasks', '~> 0.8.3'gem 'hirb'gem 'kaminari'gem 'nokogiri'gem 'newrelic_rpm'gem 'select2-rails'                   # Token Fieldsgem 'twilio-ruby'gem 'rails_autolink'                  # Convert urls to linksgem 'redis', '3.2.1'gem 'rest-client'gem 'rmagick'gem 'rubyzip', :require => 'zip'        # Zip files togethergem 'unf'gem 'mailgun-ruby', '~>1.0.3', require: 'mailgun'# Deploymentsgem 'mina'group :doc do  gem 'sdoc'endgroup :test do  gem 'rspec-rails', "= 2.14.2"  gem 'shoulda-matchers', :require => false  gem 'simplecov', '~> 0.9.2'  gem 'database_cleaner'  gem 'codeclimate-test-reporter', require: nilendgroup :development, :test do  gem 'quiet_assets'  gem 'factory_girl_rails', "~> 4.0"  gem 'guard', '>=2.1.0'  gem 'guard-rspec', '= 4.2.9'  gem 'spring', '1.3.6'  gem 'spring-commands-rspec'  gem 'foreman'end

New Gemfile

source 'https://rubygems.org'ruby '2.3.0'# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'gem 'rails', '4.2.5'gem 'mysql2'gem 'stackprof'# Use unicorn as the app server# gem 'unicorn'gem 'sidekiq'gem 'sinatra'gem 'whenever'gem 'thin'gem 'faye'gem 'faye-websocket'#pdf generationgem 'wicked_pdf'gem 'wkhtmltopdf-binary'# Assetsgem 'backbone-on-rails', '~> 0.9.9'gem 'coffee-rails', '~> 4.0.1'gem 'coffee-script-source', '=1.8.0'gem 'ejs'                                   # uses templates for backbonegem 'jquery-rails'gem 'jquery-ui-rails'gem 'neat'gem 'sass-rails', '~> 4.0.3'gem 'therubyracer'gem 'turbolinks'gem 'uglifier', '>= 1.3.0'gem 'active_model_serializers', '0.8.3'gem 'acts_as_list'gem 'bcrypt', '~> 3.1.2'gem 'bootstrap-sass', '~> 3.2.0.0'gem 'bower-rails'gem 'carrierwave'gem 'enumerize'gem 'embedly'                         # Url to Attachment Processinggem 'fancybox2-rails', '~> 0.2.4'gem 'flamegraph'gem 'fog'                     # s3 storagegem 'globalize'   # I18n for tagging, etc.gem 'globalize-accessors'gem 'i18n-tasks', '~> 0.8.3'gem 'hirb'gem 'kaminari'gem 'nokogiri'gem 'newrelic_rpm'gem 'select2-rails'                   # Token Fieldsgem 'twilio-ruby'gem 'rails_autolink'                  # Convert urls to linksgem 'redis', '3.2.1'gem 'rest-client'gem 'rmagick'gem 'rubyzip', :require => 'zip'        # Zip files togethergem 'unf'gem 'mailgun-ruby', '~>1.0.3', require: 'mailgun'gem 'rack-cors', :require => 'rack/cors'# Deploymentsgem 'mina'group :doc do  gem 'sdoc'endgroup :test do  gem 'rspec-rails', "= 2.14.2"  gem 'shoulda-matchers', :require => false  gem 'simplecov', '~> 0.9.2'  gem 'database_cleaner'  gem 'codeclimate-test-reporter', require: nilendgroup :development, :test do  gem 'quiet_assets'  gem 'factory_girl_rails', "~> 4.0"  gem 'guard', '>=2.1.0'  gem 'guard-rspec', '= 4.2.9'  gem 'spring', '1.6.1'  gem 'spring-commands-rspec'  gem 'foreman'end