質問するログイン新規登録

Q&A

解決済

3回答

15923閲覧

MySQL 5.6 で TEXT カラムにデフォルト値を設定できない理由

gesorein

総合スコア101

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

1クリップ

投稿2018/05/23 09:09

0

1

現在、Ruby on Rails 5.1.6 と MySQL 5.6 を使用して開発しております。

聞きたいこと

掲題の通りなのですが、MySQL 5.6 では TEXT カラムにデフォルト値を設定できません。

BLOB および TEXT カラムにはデフォルト値を割り当てられません。

MySQL 5.6 リファレンスマニュアルより引用

実際にアプケーションでデフォルト値を設定しようとするエラーになってしまいます。
しかし、同じ文字列でも VARCHAR カラムはデフォルト値を設定できます。

あまりデータベースの仕様には詳しくないのですが、
MySQL ではなぜこのような仕様になっているのかを知りたいです。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

guest

回答3

0

ベストアンサー

MySQL ではなぜこのような仕様になっているのかを知りたい

直接的な理由としては、TEXT/BLOBSの値は直接レコードバッファに格納されない(他の型との実装が異なる)ためです。

なぜそのような実装になっているのか等、根本的な理由に関してはMySQLの開発チームでないとわからないと思います。
おそらくメモリを節約するためだと思うのですが。

これは、結構前から機能要求が出ていますが、未だ対応されていません。
https://bugs.mysql.com/bug.php?id=21532

投稿2018/05/23 09:32

編集2018/05/23 09:39
xenbeat

総合スコア4258

gesorein

2018/05/23 11:43

おお、2006年頃から機能要求があるのですね...。 回答ありがとうございます!
guest

0

同じような疑問を持たれた方がおられるようです。
MySQLでテキスト列にデフォルト値を設定できないのはなぜですか?
※リンク先やリファレンスの記述を見ると、厳密モードを無効にすれば初期値が設定できる?(試してませんけど)

個人的な解釈としては、データありきで利用する用途として準備した属性なので、わざわざ初期値用の処理は作成しなかったという事かと思います。(管理のための処理コストを掛けたくなかったんじゃないかと)

投稿2018/05/23 09:23

編集2018/05/23 09:33
sazi

総合スコア25437

0

一言で言うと、blog や text は、特殊なデータ構造を持ったカラムとして処理されているからです。
一口に「文字列」ではあっても、その実装が異なっているのです。

※ソートする際に「先頭から最大n文字のみでソートする」という制限がかかるのも同じ理由です

投稿2018/05/23 09:15

tacsheaven

総合スコア13707

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.29%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問