この記事はmiriwoお一人様 Advent Calendar 2022の20日目の記事です
概要
- MySQLの大文字と小文字の扱いについて簡単にまとめる
内容
カラムの値のwhereによる絞り込み
下記カラムの値は絞り込み時、大文字小文字は考慮されない。(考慮される様にSQLを記載することはできる、バイナリ比較まで含めれば良いはず)
- CHAR
- VARCHAR
- TEXT
下記カラムの値は絞り込み時、大文字小文字は考慮される。
- BINARY
- VARBINARY
- BLOB
なので下記のようなusersテーブルのにselect * from users where name = 'test';
というSQL句を実行した時に3レコードすべてがヒットする。(nameカラムはvarchar 255)
id | name |
---|---|
1 | test |
2 | TEST |
3 | TeSt |
テーブル名やDB名
テーブル名やDB名の大文字小文字を考慮しないようにするにはmysqldの起動時にlower_case_table_names
の値で設定する事ができる。
lower_case_table_names
はMySQLサーバーの初期化時のみ設定できる。初期化後のlower_case_table_namesの値の設定変更は禁止されているらしいので注意すること。
状態 | 解説 |
---|---|
lower_case_table_names=0 | 大文字と小文字が区別される (Windows、Macでこの設定にしてはだめ) |
lower_case_table_names=1 | 大文字と小文字が区別されない 各名前は小文字でディスクに保存される。なので show tableした時は大文字で作成したテーブルも小文字で表示される |
lower_case_table_names=2 | 大文字と小文字が区別されない 大文字で作成したテーブル名は大文字で、小文字で作成したテーブル名は小文字でディスクに保存される。しかしshow tableした時はすべて小文字で表示される |
ちなみにlower_case_table_names
の値は下記SQLを実行することで現在の設定値を確認する事ができる。
show variables where variable_name='lower_case_table_names';
参考文献