MySQLでデータベースを作成する(CREATE DATABASE)

MySQL

MySQLでデータベースを作成する方法について書いています。

データベースは、アプリケーションのデータを保存し、管理するための基本的な構成要素です。
MySQLでデータベースを作成するには、CREATE DATABASE文を使用します。

この記事では、基本的なデータベースの作成方法から、命名規則、エラー発生時の対応、そして文字コードや照合順序といった詳細な設定まで、網羅的に解説します。

動作環境: MySQL 8.0.32

データベースを作成するには?

MySQLで新しいデータベースを作成するには、SQLコマンドのCREATE DATABASE文を実行します。基本的な構文は以下の通りです。

CREATE DATABASE データベース名;

例えば、codelikeという名前のデータベースを作成するには、次のように記述します。

CREATE DATABASE codelike;

このコマンドを実行すると、MySQLサーバー上にcodelikeという名前の新しいデータベースが作成されます。データベース名は自由に設定できますが、次の項で説明する命名規則に従う必要があります。

データベース名の命名規則

データベース名にはいくつかのルールがあります。これらのルールを守ることで、予期せぬエラーを防ぎ、データベースを安定して運用することができます。

  • 数値だけで名前をつけることはできない: データベース名は数字のみで構成することはできません。必ず1文字以上のアルファベット、アンダースコア(_)、またはドル記号($)を含める必要があります。
  • 64文字を超えることができない: データベース名の長さは最大64文字です。これを超える名前は使用できません。
  • スペース文字を終わりに使うことができない: データベース名の末尾にスペースを使用することはできません。

スペースを含むデータベース名について:

データベース名にスペースを含めることも可能ですが、一般的ではありません。スペースを含む名前を使用する場合は、データベース名をグレイヴ・アクセント () で囲む必要があります。

CREATE DATABASE `fuga hoge`;

ただし、スペースを含む名前はSQL文で扱う際にエスケープ処理が必要になる場合があり、可読性や保守性の観点から、スペースはアンダースコア (_) で置き換えることが推奨されます。

データベース作成時にエラーになる4パターンと解決策

データベースを作成しようとした際に発生しやすいエラーとその原因、解決策について解説します。

1. 既に存在するデータベースを作成しようとした場合

同じ名前のデータベースが既に存在する場合、ERROR 1007 (HY000)が発生します。

ERROR 1007 (HY000): Can't create database 'test'; database exists

解決策:

  • 新しいデータベース名を使用する。
  • 既存のデータベースが不要な場合は、DROP DATABASE文で削除する(ただし、データの損失に注意が必要です)。

2. 数値だけでデータベース名を作成しようとした場合

データベース名を数字だけで指定すると、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

解決策:

  • データベース名には、少なくとも1つのアルファベット、アンダースコア、またはドル記号を含めるようにします。例:db_111one_one_one

3. データベース名の最後にスペースを使用した場合

データベース名の最後にスペースを含めると、ERROR 1102 (42000)エラーが発生します。

CREATE DATABASE `test `;
ERROR 1102 (42000): Incorrect database name 'test '

解決策:

  • データベース名の末尾にスペースを使用しないようにします。スペースを使用したい場合は、アンダースコアで代替することを推奨します。例:test_

4. データベース名が64文字を超える場合

データベース名の長さが64文字を超えると、ERROR 1059 (42000)エラーが発生します。

CREATE DATABASE `testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttestt`;
ERROR 1059 (42000): Identifier name 'testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttestt' is too long

解決策:

  • データベース名は64文字以内に収まるように、短く分かりやすい名前をつけましょう。

データベースが存在するときには無視して実行する (IF NOT EXISTS)

データベースを作成する際に、同じ名前のデータベースが既に存在する場合にエラーを回避したい場合は、IF NOT EXISTS句を使用します。

CREATE DATABASE IF NOT EXISTS codelike;

このSQL文を実行すると、codelikeデータベースが存在しない場合にのみ新しいデータベースが作成されます。既に存在する場合は、何も行われず、エラーも発生しません。

データベース作成時に文字コード・照合順序を指定する

データベースを作成する際に、使用する文字コード(Character Set)と照合順序(Collation)を指定することができます。これらは、データベースに格納するデータの文字エンコーディングや、文字列の比較方法に影響を与えます。

文字コードとは?

文字コードは、文字をコンピュータ上で表現するための符号化方式です。日本語のデータを扱う場合は、utf8mb4という文字コードを使用することが一般的です。utf8mb4は、様々な言語の文字を扱えるUnicodeの一種であり、MySQL 5.5.3以降で導入されました。

照合順序とは?

照合順序は、特定の文字コードにおける文字の比較ルールを定義したものです。
例えば、大文字と小文字を区別するかどうか、全角文字と半角文字を区別するかどうかなどを設定できます。

文字コードを指定する

データベース作成時に文字コードを指定するには、DEFAULT CHARACTER SET句を使用します。

CREATE DATABASE codelike DEFAULT CHARACTER SET utf8mb4;

この例では、codelikeデータベースの文字コードをutf8mb4に設定しています。

照合順序を指定する

データベース作成時に照合順序を指定するには、DEFAULT COLLATE句を使用します。

CREATE DATABASE codelike DEFAULT COLLATE utf8mb4_bin;

この例では、codelikeデータベースの照合順序をutf8mb4_binに設定しています。
utf8mb4_binは、バイナリ形式で比較を行うため、大文字と小文字、全角と半角を厳密に区別します。

通常、照合順序を指定すると、それに合った文字コードが自動的に選択されます。

文字コードと照合順序を同時に指定する

文字コードと照合順序を同時に指定することも可能です。

CREATE DATABASE codelike DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

この例では、文字コードをutf8mb4、照合順序をutf8mb4_unicode_ciに設定しています。
utf8mb4_unicode_ciは、Unicodeの照合順序であり、多くの言語で一般的な比較ルールを提供します(大文字・小文字を区別しないなど)。

推奨される設定:

特に理由がない限り、文字コードにはutf8mb4、照合順序にはutf8mb4_unicode_ciまたはutf8mb4_general_ciを使用することが推奨されます。
utf8mb4_unicode_ciはより正確なUnicode照合を提供しますが、utf8mb4_general_ciは比較が高速です。どちらを選択するかは、アプリケーションの要件によって異なります。

データベースのデフォルト設定を確認する方法

作成したデータベースの文字コードと照合順序を確認するには、以下のSQLコマンドを実行します。

SHOW CREATE DATABASE データベース名;

例えば、codelikeデータベースの設定を確認する場合は、以下のようになります。

SHOW CREATE DATABASE codelike;

実行結果には、データベースの作成に使用したSQL文が表示され、そこで文字コードと照合順序を確認できます。

データベース作成に使える文字コードを調べる

MySQLサーバーで使用できる文字コードの一覧を表示するには、以下の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 |
# ---- 省略 -----
| utf8mb4  | UTF-8 Unicode                   | utf8mb4_general_ci  |      4 |
+----------+---------------------------------+---------------------+--------+

文字コードを指定して使える照合順序を調べる

特定の文字コードで使用できる照合順序の一覧を表示するには、以下のSQLコマンドを実行します。

SHOW COLLATION WHERE CHARSET = '文字コード名';

例えば、sjis文字コードで使用できる照合順序を調べるには、次のように記述します。

SHOW COLLATION WHERE CHARSET = 'sjis';

実行すると、指定した文字コードに関連付けられた照合順序の名前、ID、デフォルトかどうか、コンパイルされているかどうかなどの情報が表示されます。

+------------------+---------+----+---------+----------+---------+---------------+
| 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でデータベースを作成するための基本的な方法から、エラー対応、文字コードと照合順序の設定までを解説しました。
主なポイントは以下の通りです。

・`CREATE DATABASE データベース名;` コマンドで新しいデータベースを作成できる。
・データベース名には命名規則があり、数値のみや64文字を超える名前は使用できない。
・`IF NOT EXISTS`句を使用すると、データベースが既に存在する場合にエラーを無視できる。
・データベース作成時に `DEFAULT CHARACTER SET` で文字コード、`DEFAULT COLLATE` で照合順序を指定できる。
・適切な文字コードと照合順序を選択することは、データの正確性とアプリケーションの動作に重要である。通常は `utf8mb4` と `utf8mb4_unicode_ci` または `utf8mb4_general_ci` の組み合わせが推奨される。
・`SHOW CHARACTER SET;` コマンドで利用可能な文字コードを、`SHOW COLLATION WHERE CHARSET = ‘文字コード名’;` コマンドで特定の文字コードで利用可能な照合順序を確認できる。
・作成したデータベースの設定は `SHOW CREATE DATABASE データベース名;` で確認できる。

コメント