新鮮

頑張らないために頑張る

SPONSORED LINK

MySQL勉強 大文字小文字の区別

MySQL case-sensitive / non-case-sensitive

  • DB 名やカラム名などのオブジェクト名について大文字文字小文字の扱いが異なる。
  • さらにOSによっても大文字小文字の扱いが異なる。
  • 大文字小文字を区別することを case-sensitive という。
  • 大文字小文字を区別しないことを non-case-sensitive という。

オブジェクト名 / OS の大文字小文字の扱い

オブジェクト unix windows
データベース名 区別する 区別しない
テーブル名 区別する 区別しない
カラム名 区別しない 区別しない
インデックス名 区別しない 区別しない
トリガー名 区別する 区別しない
ストアドルーチン名 区別しない 区別しない
イベント名 区別しない 区別しない

なぜOSに依存するオブジェクトがあるかというと、一部のオブジェクトはOSのディレクトリ名やファイル名を使うからとのこと。

実験

Docker環境(unix系)で試してみる。

mysql> create database t;
mysql> create database T;
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| T                  | /* 大文字 T データベース */
| mysql              |
| performance_schema |
| sys                |
| t                  | /* 小文字 t データベース */
+--------------------+

T と t の2つのデータベースができました。

次に区別しない(non_case-sensitive)もみてみます。

mysql> use t;
mysql> create table test( a integer, b integer, primary key(a) );
Query OK, 0 rows affected (0.04 sec)

mysql> drop table test;
Query OK, 0 rows affected (0.01 sec)

mysql> create table test( a integer, A integer, primary key(a) );
ERROR 1060 (42S21): Duplicate column name 'A'

カラム名が重複していると怒られました。カラム名は大文字小文字を区別しないので、a と A は同じカラム名と認識します。同じカラム名は使えないので ERROR になりました。

試験用チェックリスト

  • 一部OSでは、データベース名などは大文字小文字を区別する
  • すべてのOSで、カラム名などは大文字小文字を区別しない