0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[マイグレーション]Mysql2::Error: BLOB, TEXT, GEOMETRY or JSON columnの原因と解決策

Last updated at Posted at 2024-04-04

エラー文

テーブル作成のため、モデルとともに作成されたマイグレーションファイルに、型とカラム名を書き、rails db:migrateを実行した。

するとターミナルが以下のようなエラーを吐き出した。

xxxxxx@yyyyyy testApp % rails db:migrate
== 20240404111608 DeviseCreateUsers: migrating ================================
-- create_table(:users)
rails aborted!
StandardError: An error has occurred, all later migrations canceled: (StandardError)

Mysql2::Error: BLOB, TEXT, GEOMETRY or JSON column 'profile' can't have a default value
/Users/code/Desktop/xxxxx/project_2.0/testApp/db/migrate/20240404111608_devise_create_users.rb:5:in `change'

Caused by:
ActiveRecord::StatementInvalid: Mysql2::Error: BLOB, TEXT, GEOMETRY or JSON column 'profile' can't have a default value (ActiveRecord::StatementInvalid)
/Users/code/Desktop/xxxxx/project_2.0/testApp/db/migrate/20240404111608_devise_create_users.rb:5:in `change'

Caused by:
Mysql2::Error: BLOB, TEXT, GEOMETRY or JSON column 'profile' can't have a default value (Mysql2::Error)
/Users/code/Desktop/xxxxx/project_2.0/testApp/db/migrate/20240404111608_devise_create_users.rb:5:in `change'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)

エラー内容と原因

エラー内容

一文目

rails aborted!
StandardError: An error has occurred, all later migrations canceled: (StandardError)

これは、Railsのマイグレーション実行中に標準エラー(StandardError)が発生したことを意味しており、それによってマイグレーションが中断され、以降のマイグレーションがキャンセルされた状態を示している。

原因

以降を見てみよう。

Mysql2::Error: BLOB, TEXT, GEOMETRY or JSON column 'profile' can't have a default value

エラーの原因は、MySQLではBLOB, TEXT, GEOMETRY, または JSONタイプ(型)のカラムにデフォルト値を設定することができないが、設定されているということだ。

解決策

マイグレーションファイルを見てみよう。

db/migrate/20240404111608_devise_create_users.rb
# frozen_string_literal: true

class DeviseCreateUsers < ActiveRecord::Migration[7.0]
  def change
    create_table :users do |t|
      ## Database authenticatable
      t.string :email,              null: false, default: ""
      t.string :encrypted_password, null: false, default: ""
      t.string :name,               null: false, default: ""
      t.text   :profile,            null: false, default: ""
      t.text   :occupation,         null: false, default: ""
      t.text   :position,           null: false, default: ""     

      ## Recoverable
      t.string   :reset_password_token
      t.datetime :reset_password_sent_at

# 省略

textタイプ(型)に、null: false, default: "" とデフォルト値が設定されていた。

従って、以下のようにtextタイプ(型)から、null: false, default: "" を削除すれば良い。

db/migrate/20240404111608_devise_create_users.rb
# frozen_string_literal: true

class DeviseCreateUsers < ActiveRecord::Migration[7.0]
  def change
    create_table :users do |t|
      ## Database authenticatable
      t.string :email,              null: false, default: ""
      t.string :encrypted_password, null: false, default: ""
      t.string :name,               null: false, default: ""
      t.text   :profile
      t.text   :occupation
      t.text   :position

      ## Recoverable
      t.string   :reset_password_token
      t.datetime :reset_password_sent_at

# 省略

このように、デフォルト値を指定しない記述に変更すれば解決する。

修正後はrails db:migrateコマンドでマイグレーションを実行すればクリア。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?