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_111
、one_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でデータベースを作成するための基本的な方法から、エラー対応、文字コードと照合順序の設定までを解説しました。
主なポイントは以下の通りです。
・データベース名には命名規則があり、数値のみや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 データベース名;` で確認できる。
コメント