今日もプログラミング

IT技術とかプログラミングのこととか特にJavaを中心に書いていきます

データベースの列名で大文字と小文字は区別される?

データベースのテーブル名で大文字と小文字は区別される? と同じ結果になると思われるが、一応確認してみた。

Oracle

SQL> create table case_column_test (c1 char(2), C1 char(2));
create table case_column_test (c1 char(2), C1 char(2))
                                           *
行1でエラーが発生しました。:
ORA-00957: 列名が重複しています。


SQL> create table case_column_test ("c1" char(2), C1 char(2), c2 char(2));

表が作成されました。

SQL> desc case_column_test;
 名前                                      NULL?    型
 ----------------------------------------- -------- ----------------------------

 c1                                                 CHAR(2)
 C1                                                 CHAR(2)
 C2                                                 CHAR(2)

SQL>

デフォルトでは大文字/小文字は区別されないが、引用符を付けると区別される。

 

MySQL

Windows

mysql> create table case_column_test (`c1` char(2), `C1` char(2));
ERROR 1060 (42S21): Duplicate column name 'C1'
mysql>

Windowsでは、大文字/小文字は区別されない。

 

Linux

mysql> create table case_test (id1 char(2));
Query OK, 0 rows affected (0.03 sec)

mysql> create table CASE_TEST (id1 char(2));
Query OK, 0 rows affected (0.02 sec)

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| CASE_TEST      |
| case_test      |
+----------------+
2 rows in set (0.00 sec)

mysql> create table case_column_test (c1 char(2), C1 char(2));
ERROR 1060 (42S21): Duplicate column name 'C1'
mysql> create table case_column_test (`c1` char(2), `C1` char(2));
ERROR 1060 (42S21): Duplicate column name 'C1'

Linuxでは、テーブル名は大文字と小文字は区別される。

列名も区別されるかと思ったら…、列名はそ引用符で囲んだとしても区別されないようだ。

 

PostgreSQL

testdb=# create table case_column_test (c1 char(2), C1 char(2));
ERROR:  列"c1"が複数指定されました
testdb=# create table case_column_test ("c1" char(2), "C1" char(2), C2 char(2));

CREATE TABLE
testdb=# \d case_column_test
テーブル "public.case_column_test"
 列 |      型      | 修飾語
----+--------------+--------
 c1 | character(2) |
 C1 | character(2) |
 c2 | character(2) |

testdb=#

Oracleと同様、デフォルトでは大文字/小文字は区別されないが、引用符を付けると区別される。

 

SQL Server

照合順序CI

1> create table case_column_test (c1 char(2), C2 char(2));
2> go
1> sp_help case_column_test
2> go
 Name
...
 case_column_test
...
 Column_name
...
 c1
...
 C2
...
1> create table case_column_test ([c1] char(2), [C1] char(2))
2> go
メッセージ 2705、レベル 16、状態 3、サーバー xxxxxxxx\SQLEXPRESS、行 1
各テーブルの列名は一意にしてください。テーブル 'case_column_test' の列名 'C1' が
複数指定されています。
1>

照合順序がCIの場合は、大文字/小文字が区別されない。

 

照合順序CS

1> create table case_test (id1 char(2))
2> go
1> create table CASE_TEST (id1 char(2))
2> go
1> create table case_column_test (c1 char(2), C1 char(2))
2> go
1> sp_help case_column_test
2> go
 Name
...
 case_column_test
...
 Column_name
...
 c1
...
 C1
...

照合順序がCSの場合は、大文字/小文字が区別される。