MySQLでcreate tableしたらテーブルがないって言われた
テーブル作ってないのにテーブルがないって怒られる
(゚ Д ゚)ハァ?
貸与された Mac の Docker 上に構築した MySQL5.7 使ってて、 create table
しようとしたらテーブルがないけど?っていうエラーが出た。
そりゃないからテーブル作ろうとしてんじゃん、アホか!
・・・ってキレても状況が改善しなかったので調べた。
ちなみに同じことして Windows のときは大丈夫だった。
他のメンバーも 3 年くらい前に支給された Mac なら発生しないっぽい。
作成したテーブル
こんな感じの、なんの変哲もないテーブル。
-- (仮) システムステータス
CREATE TABLE systemStatus(
systemId VARCHAR(10) NOT NULL PRIMARY KEY,
status VARCHAR(20)
);
流すと失敗する
テーブルがないから作ろうとしてるのに、作るとテーブルがないっていうエラーになる。
SQLエラー [1146] [42S02]: Table ‘my_db.systemstatus’ doesn’t exist
1146
と 42S02
で調べても、 「select したときにテーブルがないとこうなるよ!」っていう当たり前の答え。
んなこたぁ知ってるよ!
ん? でもよく見るとsystemStatus
と systemstatus
で大文字小文字が違うような。
同じエラーで違う意味もあった
テーブル互換性というやつがあるらしい。
https://dev.mysql.com/doc/refman/5.6/ja/innodb-file-format-compatibility-checking-table-access.html
これを見ると、システム側で大文字小文字を区別する場合としない場合で挙動が変わるとか。
なるほど、docker に構築してるけど実際のファイルシステムは Mac の APFS だから扱いが違うのか?
小文字を強制すると解決
大文字小文字の区別があるからいかんっぽいので小文字を強制してみた。
docker 構築時の my.cnf
に lower_case_table_names=1
を追記。
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
lower_case_table_names=1 ← これを追加
[client]
default-character-set=utf8mb4
これでエラーが起きなくなった!
実は解決までにめっちゃ時間かかった。
あなたの手助けになりますように・・・