404 Not Found

404 Not Found


nginx

MySQL データベースの操作と文字セットの設定

データベースとは、データを格納するための容器のことです。データベースを扱うことは、MySQL を使用するための第一歩です。

このレッスンでは、データベースに対するCRUD操作の実行方法と、文字セットの設定方法について学びます。

100%
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 を使用して既存のデータを変換してください。

📖 まとめ


📝 練習問題

  1. 基本問題(難易度 ⭐):文字セット utf8mb4、照合順序 utf8mb4_unicode_ci を持つ school という名前のデータベースを作成してください。

  2. 上級演習(難易度 ⭐⭐)school データベースの作成ステートメントを確認し、文字セットが正しく設定されていることを確認してください。その後、テスト用テーブルを作成し、絵文字を含むデータを挿入して、絵文字のサポートが機能しているかを確認してください。

  3. 課題(難易度:⭐⭐⭐)school データベースを backup/ ディレクトリにバックアップするスクリプトを作成してください。ファイル名には日付を含めてください(例:school_20260703.sql)。

Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%