MySQLでカラムの文字セットを設定・変更する方法
MySQLでは、ALTER TABLE文とMODIFY句を組み合わせることで、特定のカラム単位で文字セット(キャラクタセット)を変更できます。ここでは、具体的な手順をサンプルコード付きで解説します。
基本構文
カラムの文字セットを設定する際の構文は以下のとおりです。
ALTER TABLE テーブル名 MODIFY カラム名 データ型 CHARACTER SET 文字セット名;
文字セット名には「utf8」や「utf8mb4」など、任意の名前を指定できます。なお、文字セットを変更すると、照合順序(COLLATE)もその文字セットのデフォルト値へ自動的に切り替わる点に注意してください。
サンプルテーブルの作成
まず、動作確認用のテーブルを作成します。以下のクエリを実行しましょう。
mysql> create table setCharsetDemo -> ( -> FirstName varchar(60) -> ); Query OK, 0 rows affected (2.09 sec)
現在の文字セットを確認する
SHOW CREATE TABLE文を使用すると、カラムの文字セットを含むテーブル定義を確認できます。
mysql> show create table setCharsetDemo;
実行結果は次のとおりです。
+----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | setCharsetDemo | CREATE TABLE `setcharsetdemo` (`FirstName` varchar(60) COLLATE utf8mb4_unicode_ci DEFAULT NULL) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci | +----------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
出力結果を見ると、このテーブルのデフォルト文字セットはutf8mb4になっていることがわかります。ここから、カラム単位で別の文字セットを指定してみましょう。
カラムの文字セットをutf8に変更する
次のクエリで、FirstNameカラムの文字セットをutf8に変更します。
mysql> alter table setCharsetDemo modify FirstName varchar(60) CHARACTER SET utf8; Query OK, 0 rows affected, 1 warning (2.81 sec) Records: 0 Duplicates: 0 Warnings: 1
変更結果の確認
再度SHOW CREATE TABLEを実行し、文字セットが正しく反映されたかどうかを確認します。
mysql> show create table setCharsetDemo;
実行結果は次のとおりです。
+----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | setCharsetDemo | CREATE TABLE `setcharsetdemo` (`FirstName` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci | +----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
このように、FirstNameカラムがCHARACTER SET utf8 COLLATE utf8_general_ciへ正常に更新されました。テーブル全体のデフォルト文字セット(utf8mb4)はそのまま維持され、指定したカラムのみが個別の文字セットを持つ状態になります。
補足:utf8とutf8mb4の違いについて
MySQLのutf8は最大3バイトまでの文字しか格納できないため、絵文字や一部の特殊記号といった4バイトのUnicode文字を保存できません。日本語サイトで絵文字などを扱う予定がある場合は、utf8mb4の使用を推奨します。文字セットの選択は、データの性質に応じて慎重に行いましょう。
-
MySQLで列にENUM型を設定する方法
```html MySQLでは、テーブルを作成する際に、あらかじめ決められた文字列のリストから値を選ばせたい列に対してENUM型を設定できます。ENUMは、指定した候補値以外のデータが登録されるのを防ぎたい場合に便利なデータ型です。ここでは、実際にテーブルを作成しながら基本的な使い方を見ていきましょう。ENUM型を含むテーブルを作成するまず、学生の点数と合否ステータスを管理するテーブルを作成します。「StudentStatus」列には「First」「Second」「Fail」の3つの値のみを許可するENUM型を設定しています。mysql> create table DemoTable20
-
MySQLでJSON型カラムにデフォルト値を設定する方法
MySQLでは、JSON型のカラムにもデフォルト値を設定できます。その場合は、DEFAULT制約を使用します。基本的な構文は以下の通りです。ALTER TABLE テーブル名 MODIFY COLUMN カラム名 JSON NOT NULL DEFAULT ( JSON_OBJECT() );サンプルテーブルの作成まず、動作確認用のテーブルを作成しましょう。ここでは demo24 というテーブルを作成します。mysql> create table demo24 -> ( -> employee_information text -> ) ->; Query OK,