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?

More than 1 year has passed since last update.

CREATE TABLEするとTable doesn't existと言われた話

Posted at

はじめに

※別のブログに投稿していた記事をQiitaに投稿し直しています。(元の記事は削除予定)

エラー発生までの流れ

  1. Macでdocker-composeを使ってMySQL環境を構築
  2. CREATE TABLE XXX
  3. DROP TABLE XXX
  4. CREATE TABLE XXX でエラー発生
Table ‘xxx’ doesn't exist

いや、無いから作ろうとしているのに、無いよって。
よく見るとテーブル名が小文字になっている。
ググってみると、lower_case_table_namesというパラメータで回避できそう。

lower_case_table_namesについて

意味
0 テーブル名とデータベース名は、CREATE TABLE または CREATE DATABASE ステートメントで指定された大文字または小文字を使用してディスク上に格納されます。名前比較では大文字と小文字が区別されます。大文字小文字を区別しないファイル名を持つシステム (Windows や OS X など) で MySQL を実行する場合、この変数を 0 に設定しないでください。大文字と小文字を区別しないファイルシステムで --lower-case-table-names=0 を使用して強制的にこの変数を 0 に設定し、大文字と小文字を変えて MyISAM テーブル名にアクセスした場合、インデックスが破損することがあります。
1 テーブル名はディスク上に小文字で格納され、名前比較では大文字と小文字は区別されません。MySQL では、保存およびルックアップ時にすべてのテーブル名が小文字に変換されます。この動作はデータベース名やテーブルエイリアスにも適用されます。
2 テーブル名とデータベース名は、CREATE TABLE または CREATE DATABASE ステートメントで指定された大文字または小文字を使用してディスク上に格納されますが、MySQL ではルックアップ時に小文字に変換されます。名前比較では大文字と小文字が区別されません。これは大文字と小文字が区別されないファイルシステムでのみ機能します。InnoDB テーブル名は lower_case_table_names=1 のように、小文字で格納されます。

デフォルト値はUnixは0, Windowsは1, OS Xは2で、0を設定すれば解決しそう。

lower_case_table_namesを設定、再びエラー

docker-composeのymlファイルに下記を追加

command: --lower_case_table_names=0

追加後にコンテナを再起動したらエラー発生

[ERROR] The server option 'lower_case_table_names' is configured to use case sensitive table names but the data directory is on a case-insensitive file system which is an unsupported combination. Please consider either using a case sensitive file system for your data directory or switching to a case-insensitive table name mode.

ファイルシステムが大文字小文字を区別していないらしい。
ディスクユーティリティで確認すると「APFS」で、大文字小文字は区別しない。

image.png

ディスクの初期化は面倒臭い。。

対処

大したテーブル、データは入っていないので、ボリュームを削除し、コンテナを再作成。
初回のCREATE TABLEはエラーになっていないので、DROP TABLEで完全に消えていないのかも。
気が向いたらこの辺り調べてみる。。

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?