1.

データベースの作成

編集

本稿は MariaDB / MySQL のデータベース新規作成 SQL に関する記事です。CREATE DATABASE 文の構文・典型例・運用上の注意をまとめます。

構文

[ ] は任意

CREATE DATABASE [IF NOT EXISTS] データベース名
  [DEFAULT CHARACTER SET 文字コード]
  [DEFAULT COLLATE 照合順序];

CREATE SCHEMA も同じ意味の別名として使えます。

典型的な作成例 (推奨)

CREATE DATABASE myapp
  DEFAULT CHARACTER SET utf8mb4
  DEFAULT COLLATE utf8mb4_unicode_ci;

絵文字や一部の漢字を扱うため、文字コードは utf8mb4 (4バイト) を使うのが原則です。古い utf8 (3バイト) は絵文字や一部の漢字で文字化けします。

定義の確認

作成した DB の文字コード・Collation を確認するには次のコマンドを使います。

SHOW CREATE DATABASE myapp;

あるいは information_schema.schemata を SELECT しても確認できます。

SELECT schema_name, default_character_set_name, default_collation_name
  FROM information_schema.schemata
 WHERE schema_name = 'myapp';

主なオプションと使い分け

オプション意味備考
IF NOT EXISTS同名の DB があってもエラーにしないスクリプトの冪等性に有効
CHARACTER SET既定文字コード多くの場面で utf8mb4
COLLATE照合順序 (大文字小文字・全半角等の比較ルール)MySQL 8 既定は utf8mb4_0900_ai_ci、MariaDB は utf8mb4_unicode_ci

文字コード・Collation の選択指針

選定理由
CHARACTER SET utf8mb4絵文字を含む 4 バイト文字 (一部の漢字含む) を正しく保存できる
COLLATE utf8mb4_0900_ai_ci (MySQL 8.0+)Unicode 9.0 ベース、性能・互換性が改善された新標準
COLLATE utf8mb4_unicode_ci従来から広く使われ、MariaDB でも利用可
COLLATE utf8mb4_bin大文字小文字・全半角を厳密に区別したい場合

削除と存在確認

-- 一覧表示
SHOW DATABASES;

-- 削除 (存在しない場合エラーを抑制)
DROP DATABASE IF EXISTS myapp;

-- 文字コード変更
ALTER DATABASE myapp
  CHARACTER SET utf8mb4
  COLLATE utf8mb4_unicode_ci;

権限

本番運用では、新規 DB を作ったあとにアプリ用ユーザを作成し、必要最小限の権限のみを付与するのが基本です。

CREATE USER 'app'@'%' IDENTIFIED BY '***';
GRANT SELECT, INSERT, UPDATE, DELETE ON myapp.* TO 'app'@'%';
FLUSH PRIVILEGES;

注意点

  • 命名規則: 小文字スネークケース推奨。Linux と Windows で大文字小文字の扱いが違うため、混在は避ける
  • 予約語と被る名前 (ordergroup 等) は避ける
  • 本番環境での DROP / 再作成はデータ消失の危険大。必ず事前バックアップ
  • レプリケーション環境ではマスタ側でのみ実行し、バイナリログ経由でスレーブに伝搬
  • クラウド (RDS / Aurora 等) では、サービス側がデフォルトの文字コードを指定しているため、上書きが必要な場合がある
  • テーブル・カラムの Collation はテーブル作成時にも指定可能。DB 既定だけに頼らず、必要に応じて明示する

関連

編集
Post Share
子ページ

子ページはありません

同階層のページ

同階層のページはありません