MySQLでデータベースを作成する方法について書いています。
データベースを作成するときには、CREATE DATABASE文を使うと良いです。
MySQLのバージョン8.0.32で、動作を検証しています。
データベースを作成するには?
MySQLでデータベースを作成するには、CREATE DATABASE文を使います。
CREATE DATABASE文の後に、データベース名を入れると作成することができます。
CREATE DATABASE codelike;
上記ではcodelike
という名前のデータベースを作成しています。
名前は好きなようにつけることができますが、次項の命名規則には従う必要があります。
データベース名の命名規則
データベース名の命名規則は下記になります。
・64文字を超えることができない
・スペース文字を終わりに使うことができない
スペースも使うことができますが、スペースはアンダースコアに置き換えて作成するのが通例です。
ちなみにスペースを含む名前のデータベースは、下記のようにすることで作成できます。
CREATE DATABASE `fuga hoge`;
グレイヴ・アクセント(`)で囲うと、スペースを含めて文字列として認識されて、登録することができます。
データベース作成時にエラーになる4パターン
データベース作成時にエラーになる4つのパターンを検証してみました。
既に存在する
既に存在するデータベースを作成しようとすると、ERROR 1007 (HY000)
が発生します。
ERROR 1007 (HY000): Can't create database 'test'; database exists
名前を変えるか、既にあるデータベースが必要なかったら削除しましょう。
数値だけで名前をつける
数字だけで、下記のようにデータベースを作ろうとすると、ERROR 1064 (42000)
エラーが発生します。
create database 111;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '111' at line 1
シンプルなアルファベットで名前をつけましょう。
最後がスペースになる
データベース名の最後がスペースだと、ERROR 1102 (42000)
エラーが発生します。
CREATE DATABASE `test `;
ERROR 1102 (42000): Incorrect database name 'test '
アンダーバーを使うようにして、スペースはなるべく使わない方が良いかと思います。
名前が64文字を超える
データベース名が64文字を超える場合は、下記のようにエラーになります。
CREATE DATABASE `testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttestt`;
ERROR 1059 (42000): Identifier name 'testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttestt' is too long
なるべく短くわかりやすい名前が好ましいかと思います。
データベースが存在するときには無視して実行する
IF NOT EXISTS
を使うことで、同じデータベース名のデータベースが存在する場合にも、無視してSQL文を実行することができます。
例えば、下記のように使います。
CREATE DATABASE IF NOT EXISTS codelike;
既にcodelike
データベースがある場合にも、エラーにならずに実行されます。
データベース作成時に文字コード・照合順序を指定する
データベース作成時に文字コードと照合順序を指定することができます。
照合順序は、文字コード内の文字を比較するためのルールです。
公式ページのこちらに記載されています。
文字コードを指定する
データベースの文字コードを指定して、作成するには下記のようにします。
CREATE DATABASE codelike DEFAULT CHARACTER SET utf8mb4;
DEFAULT CHARACTER SET
の後に文字コードを指定することで、データベースの文字コードを設定できます。
照合順序を指定する
データベースの照合順序を指定して、作成するには下記のようにします。
CREATE DATABASE codelike DEFAULT COLLATE utf8mb4_bin;
この場合には、照合順序にあった文字コードが指定されるようです。
文字コードと照合順序を指定する
下記のようにすることで、文字コードと照合順序を一緒に指定できます。
CREATE DATABASE codelike DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
データベース作成に使える文字コードを調べる
下記のSQLを実行すると、データベース作成時に指定できる文字コードを調べることができます。
SHOW CHARACTER SET
実行すると、下記のように文字コードの一覧が表示されます。
+----------+---------------------------------+---------------------+--------+
| Charset | Description | Default collation | Maxlen |
+----------+---------------------------------+---------------------+--------+
| armscii8 | ARMSCII-8 Armenian | armscii8_general_ci | 1 |
| ascii | US ASCII | ascii_general_ci | 1 |
| big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 |
| binary | Binary pseudo charset | binary | 1 |
| cp1250 | Windows Central European | cp1250_general_ci | 1 |
| cp1251 | Windows Cyrillic | cp1251_general_ci | 1 |
| cp1256 | Windows Arabic | cp1256_general_ci | 1 |
| cp1257 | Windows Baltic | cp1257_general_ci | 1 |
| cp850 | DOS West European | cp850_general_ci | 1 |
| cp852 | DOS Central European | cp852_general_ci | 1 |
| cp866 | DOS Russian | cp866_general_ci | 1 |
| cp932 | SJIS for Windows Japanese | cp932_japanese_ci | 2 |
# ---- 省略 -----
文字コードを指定して使える照合順序を調べる
文字コードを指定して、使える照合順序を調べるには、下記のようにします。
SHOW COLLATION WHERE CHARSET = 'sjis';
実行すると、下記のように照合順序の一覧が表示されます。
sjis
を指定したので、sjis
で使える照合順序が表示されました。
+------------------+---------+----+---------+----------+---------+---------------+
| Collation | Charset | Id | Default | Compiled | Sortlen | Pad_attribute |
+------------------+---------+----+---------+----------+---------+---------------+
| sjis_bin | sjis | 88 | | Yes | 1 | PAD SPACE |
| sjis_japanese_ci | sjis | 13 | Yes | Yes | 1 | PAD SPACE |
+------------------+---------+----+---------+----------+---------+---------------+
データベースを作成する方法のまとめ
今回はMySQLでデータベースを作成する方法について書きました。
記事の内容をまとめると、下記のようになります。
・IF NOT EXISTSを使うと、SQL実行時にデータベースが既にある場合には無視する。
・データベース作成時に文字コードと照合順序の指定ができる。
・使える文字コードを調べるにはSHOW CHARACTER SETが使えた。
・照合順序を調べるにはSHOW COLLATIONが使えた。
コメント