2021-03-10

MySQLでcreate tableしたらテーブルがないって言われた

MySQL

テーブル作ってないのにテーブルがないって怒られる

(゚ Д ゚)ハァ?

貸与された 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

114642S02 で調べても、 「select したときにテーブルがないとこうなるよ!」っていう当たり前の答え。
んなこたぁ知ってるよ!

ん? でもよく見るとsystemStatussystemstatus で大文字小文字が違うような。

同じエラーで違う意味もあった

テーブル互換性というやつがあるらしい。
https://dev.mysql.com/doc/refman/5.6/ja/innodb-file-format-compatibility-checking-table-access.html

これを見ると、システム側で大文字小文字を区別する場合としない場合で挙動が変わるとか。
なるほど、docker に構築してるけど実際のファイルシステムは Mac の APFS だから扱いが違うのか?

小文字を強制すると解決

大文字小文字の区別があるからいかんっぽいので小文字を強制してみた。
docker 構築時の my.cnflower_case_table_names=1 を追記。

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
lower_case_table_names=1 ← これを追加
[client]
default-character-set=utf8mb4

これでエラーが起きなくなった!
実は解決までにめっちゃ時間かかった。
あなたの手助けになりますように・・・


猫派 / 基本インドア / ガジェット大好き / RDP推進派
コロナ禍の趣味はPC+VRでゲーム。
最近のゲーム:Factorio / BeatSaber / にゃんこ大戦争

→ Policy