- 昔のMySQLは本当に“いい加減”だったのか
- MySQLが生まれた時代の前提
- 設計思想:止まらないことが最優先
- GROUP BYの曖昧さ
- ゼロ日付とNULL
- なぜ問題にならなかったのか
- 変化:Webが業務システムになった
- いい加減だったのではなく、役割が違った
- 現在との違い
- 移行時に起きる誤解
- まとめ
昔のMySQLは本当に“いい加減”だったのか
古いMySQLの話をすると、よく「昔のMySQLはいい加減だった」と言われます。
確かに現在のMySQLや他のRDBMSと比べると、かなり寛容な挙動をしていました。
間違ったSQLでも実行される。
型が違っても保存される。
不正な日付も受け付ける。
ただし、これは欠陥だったわけではありません。
当時のMySQLは、そもそも違う問題を解決するために作られていました。
MySQLが生まれた時代の前提
MySQLが広まり始めた1990年代後半から2000年代初頭、Web開発の状況は現在とは大きく異なっていました。
- CGIが主流
- PHPはテンプレート言語に近い使われ方
- 個人サイトが中心
- サーバは共用レンタルサーバ
重要だったのは、専門のDBAがいなくても使えるデータベースであることです。
当時の商用データベースは扱いが難しく、設定も運用も重いものでした。
小規模なWebサイトにとっては現実的ではありません。
そこで求められたのが「簡単に動くデータベース」です。
MySQLはその需要に合わせて設計されました。
設計思想:止まらないことが最優先
現在のRDBMSは、整合性や正確性を重視します。
一方、当時のWebサイトで最も困るのは「止まること」でした。
掲示板が投稿できない。
カートに商品が入らない。
ログインできない。
これらは売上や運営に直結します。
そのためMySQLは、不正な入力を拒否するより処理を継続する設計を選びました。
例です。
INSERT INTO users (age) VALUES ('abc');
昔のMySQLはこれをエラーにしません。
0として保存します。
不正データは入りますが、サイトは止まりません。
当時はこの挙動が歓迎されました。
GROUP BYの曖昧さ
もう一つ象徴的なのがGROUP BYです。
SELECT id, name FROM users GROUP BY id;
標準SQLでは不正です。
しかし昔のMySQLは実行し、結果を返しました。
理由は単純です。
多くのWebアプリが、この書き方で動いていたからです。
開発者はSQLを厳密に理解しているとは限りません。
それでもサイトが作れることが重要でした。
MySQLは「正しさ」より「使いやすさ」を優先しました。
ゼロ日付とNULL
古いMySQLの特徴として、ゼロ日付があります。
INSERT INTO orders (created_at) VALUES ('0000-00-00');
現在のRDBMSでは許されません。
しかし当時は便利でした。
未確定の日時
仮登録ユーザー
下書きデータ
こうした状態を表現するために使われていました。
NULLの扱いが難しかった時代背景もあります。
なぜ問題にならなかったのか
「それでデータは壊れなかったのか」と思うかもしれません。
実際には、大きな問題になるケースは限定的でした。
理由はシンプルです。
扱うデータが比較的単純だったからです。
- コメント
- 投稿
- 会員情報
- 商品一覧
会計や在庫管理のような厳密さは要求されていませんでした。
多少の曖昧さがあっても運用できました。
変化:Webが業務システムになった
状況が変わったのは、Webアプリが業務システムとして使われ始めてからです。
- 受注管理
- 在庫管理
- 決済連携
- 請求管理
ここでは曖昧なデータは許されません。
「だいたい合っている」では困ります。
この要求に応えるため、MySQLは方向転換します。
厳格化です。
いい加減だったのではなく、役割が違った
現在の視点から見ると、昔のMySQLは確かに緩いです。
しかし当時の目的から見ると合理的でした。
- DBAがいなくても使える
- 設定が簡単
- エラーで止まらない
この特徴が、Webの普及を支えた面もあります。
もし最初から厳密なRDBMSしか存在しなかった場合、個人サイトや小規模サービスはもっと作りにくかったはずです。
現在との違い
現在のMySQLは次の点が変わっています。
- 不正SQLを拒否
- 不正データを拒否
- 標準SQLに近い挙動
つまり、昔のMySQLの思想は「アプリケーション寄り」、現在は「データ寄り」です。
移行時に起きる誤解
古いシステムを新しいMySQLへ移行すると、多くの開発者はこう感じます。
「MySQLが厳しくなって使いにくくなった」
実際には逆です。
以前はデータベースがアプリの問題を吸収していました。
現在は吸収しなくなっただけです。
その結果、隠れていた設計上の問題が表面化します。
まとめ
昔のMySQLはいい加減だったわけではありません。
当時のWeb開発に最適化されたデータベースでした。
現在のMySQLは、業務システムでも使えるように変化しています。
その過程で、曖昧な挙動が削られました。
バージョンアップで問題が起きるのは、ソフトの品質が下がったからではありません。
過去に許されていた前提が、明文化されただけです。
そして移行作業は、単なるDB更新ではなく、システムがどの程度「曖昧さ」に依存していたかを確認する作業になります。