MySQL データベースの操作と文字セットの設定
データベースとは、データを格納するための容器のことです。データベースを扱うことは、MySQL を使用するための第一歩です。
このレッスンでは、データベースに対するCRUD操作の実行方法と、文字セットの設定方法について学びます。
graph TB
A[Database Operations] --> B[CREATE DATABASE<br/>Create a Database]
A --> C[SHOW DATABASES<br/>View Database]
A --> D[USE<br/>Select a Database]
A --> E[ALTER DATABASE<br/>Modify the character set]
A --> F[DROP DATABASE<br/>Delete the database]
B --> B1[Specify a character set utf8mb4]
E --> E1[Modify the character set/Sorting Rules]
1. 学習内容
- データベースを作成し、文字セットを指定する
- データベースを表示して選択する
- データベースの文字セットを変更する
- データベースを削除する
- 文字セットと照合順序の詳細な解説
2. 多言語ウェブサイトに関する実話
(1) 課題:文字化けした漢字
ある開発者がEコマース用のデータベースを作成し、中国語の製品名を登録しました:
SQL
INSERT INTO products (name) VALUES ('iPhone');
SELECT * FROM products;
結果:name が ??? または文字化けした状態で表示されます。
理由:データベースのデフォルトの文字セットは latin1 ですが、これは中国語に対応していません。
(2) utf8mb4 に対する解決策
SQL
-- Specify utf8mb4 character set when creating the database
CREATE DATABASE ecommerce
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
特長: 中国語、日本語、韓国語、絵文字を含むすべてのUnicode文字に対応しています。
| 文字セット | 対応範囲 | 推奨レベル |
|---|---|---|
| latin1 | 西ヨーロッパの文字 | ❌ |
| utf8 | 基本多言語(4バイト文字には対応していません) | ⚠️ |
| utf8mb4 | 完全なUnicode(絵文字を含む) | ⭐⭐⭐ |
3. データベースを作成する
(1) 基本的な構文
SQL
CREATE DATABASE [IF NOT EXISTS] database_name
[CHARACTER SET charset_name]
[COLLATE collation_name];
▶ 例:データベースの作成
SQL
-- The Simplest Way to Create
CREATE DATABASE mydb;
-- Create it if it doesn't exist (Recommended)
CREATE DATABASE IF NOT EXISTS mydb;
-- Specify a character set (Recommended)
CREATE DATABASE IF NOT EXISTS mydb
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
-- Creating an E-commerce Database
CREATE DATABASE IF NOT EXISTS ecommerce
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci
COMMENT 'E-commerce System Database';
出力:
TEXT
Query OK, 1 row affected (0.01 sec)
4. データベースを表示する
▶ 例:すべてのデータベースを表示する
SQL
-- View All Databases
SHOW DATABASES;
-- View the statement used to create the database
SHOW CREATE DATABASE mydb;
-- View the currently used database
SELECT DATABASE();
出力:
TEXT
+--------------------+
| Database |
+--------------------+
| ecommerce |
| information_schema |
| mydb |
| mysql |
| performance_schema |
| sys |
+--------------------+
6 rows in set (0.00 sec)
5. データベースを選択する
▶ 例:USE コマンド
SQL
-- Select a Database
USE ecommerce;
-- Verify the current database
SELECT DATABASE();
出力:
TEXT
+------------+
| DATABASE() |
+------------+
| ecommerce |
+------------+
6. データベースの変更
▶ 例:文字セットの変更
SQL
-- Modify the Database Character Set
ALTER DATABASE mydb
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
-- Verify Changes
SHOW CREATE DATABASE mydb;
出力:
TEXT
+----------+------------------------------------------------------------------------------------------+
| Database | Create Database |
+----------+------------------------------------------------------------------------------------------+
| mydb | CREATE DATABASE `mydb` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */ |
+----------+------------------------------------------------------------------------------------------+
7. データベースを削除する
▶ 例:データベースの削除
SQL
-- Delete the database
DROP DATABASE mydb;
-- Secure Deletion (If it exists)
DROP DATABASE IF EXISTS mydb;
⚠️ 注意: データベースを削除すると、その中のすべてのテーブルとデータが完全に削除され、この操作は元に戻せません! 続行する前に、必ず内容を確認するか、データをバックアップしてください。
8. 文字セットとソート規則
(1) 一般的な文字セット
| 文字セット | バイト長 | 対応文字 | 用途 |
|---|---|---|---|
| ASCII | 1 | 英語+数字 | すべて英語のシナリオ |
| latin1 | 1 | 西ヨーロッパの文字 | レガシーシステムとの互換性 |
| utf8 | 1-3 | 基本多言語 | 下位互換性 |
| utf8mb4 | 1-4 | フルユニコード | 推奨されるデフォルト |
(2) 並べ替えのルール
ソート規則は、文字列の比較およびソートの方法を決定します。
| 並べ替えルール | 説明 | 大文字小文字を区別する |
|---|---|---|
| utf8mb4_general_ci | 汎用、高速 | 大文字小文字を区別しない |
| utf8mb4_unicode_ci | 正確で、多言語に対応 | 大文字小文字を区別しない |
| utf8mb4_bin | バイナリ比較 | 大文字と小文字を区別 |
💡 ヒント:
_ci は大文字と小文字を区別しない比較を示し、_bin はバイナリ比較(大文字と小文字を区別する)を示します。
▶ 例:文字セットの表示
SQL
-- View All Character Sets
SHOW CHARACTER SET;
-- View All Sorting Rules
SHOW COLLATION LIKE 'utf8mb4%';
-- View the server's default character set
SHOW VARIABLES LIKE 'character_set_server';
-- View the database character set
SHOW VARIABLES LIKE 'character_set_database';
出力:
TEXT
+--------------------------+-----------------------------------------------+
| Variable_name | Value |
+--------------------------+-----------------------------------------------+
| character_set_server | utf8mb4 |
+--------------------------+-----------------------------------------------+
9. データベースのバックアップと復旧
▶ 例:mysqldump によるバックアップ
BASH
# Backing Up a Single Database
mysqldump -u root -p mydb > mydb_backup.sql
# Back up all databases
mysqldump -u root -p --all-databases > all_backup.sql
# Back up only the table structure
mysqldump -u root -p --no-data mydb > mydb_schema.sql
# Back Up a Specific Table
mysqldump -u root -p mydb users orders > tables_backup.sql
▶ 例:データベースの復元
BASH
# Restore from a backup file
mysql -u root -p mydb < mydb_backup.sql
# Restore from the MySQL command line
mysql> SOURCE /path/to/mydb_backup.sql;
❓ よくある質問
Q utf8とutf8mb4の違いは何ですか?
A utf8は最大3バイトを使用し、絵文字などの4バイト文字には対応していません。utf8mb4は完全なUTF-8です。常にutf8mb4を使用することをお勧めします。
Q データベース名を変更できますか?
A MySQLでは、データベース名の直接変更はサポートされていません。新しいデータベースを作成し、テーブルをそこに移行してから、古いデータベースを削除することができます。
Q データベースのサイズを確認するにはどうすればよいですか?
A クエリ
information_schema:SELECT table_schema, ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS size_mb FROM information_schema.tables GROUP BY table_schema; を実行してくださいQ DROP DATABASE と TRUNCATE DATABASE の違いは何ですか?
A DROP はデータベース全体(スキーマとデータ)を削除しますが、TRUNCATE はデータを消去するだけで、スキーマは保持されます。(MySQL には TRUNCATE DATABASE コマンドはありません。各テーブルに対して個別に TRUNCATE を実行する必要があります。)
Q 誤った文字セットを修正するにはどうすればよいですか?
A
ALTER DATABASE を使用してデータベースの文字セットを変更し、ALTER TABLE を使用してテーブルの文字セットを変更し、CONVERT TO を使用して既存のデータを変換してください。📖 まとめ
- CREATE DATABASE:データベースを作成します。
IF NOT EXISTSおよびutf8mb4を使用することをお勧めします。 - 使用方法 現在のデータベースを選択します。以降のすべての操作は、そのデータベースで実行されます。
- SHOW DATABASES を実行するとすべてのデータベースが表示され、SHOW CREATE DATABASE を実行すると作成ステートメントが表示されます
- ALTER DATABASE データベースのプロパティ(文字セット、照合順序)を変更します
- DROP DATABASE データベースを削除します。実行する前に、必ずバックアップが作成されていることを確認してください。
- utf8mb4 が推奨される文字セットです。Unicodeの全文字セットと絵文字に対応しています。
- mysqldump はデータベースのバックアップに使用され、mysql < file.sql は復元に使用されます
📝 練習問題
-
基本問題(難易度 ⭐):文字セット
utf8mb4、照合順序utf8mb4_unicode_ciを持つschoolという名前のデータベースを作成してください。 -
上級演習(難易度 ⭐⭐):
schoolデータベースの作成ステートメントを確認し、文字セットが正しく設定されていることを確認してください。その後、テスト用テーブルを作成し、絵文字を含むデータを挿入して、絵文字のサポートが機能しているかを確認してください。 -
課題(難易度:⭐⭐⭐):
schoolデータベースをbackup/ディレクトリにバックアップするスクリプトを作成してください。ファイル名には日付を含めてください(例:school_20260703.sql)。



