【MySQL】特定のデータベース内の全テーブルの文字セットを列名とともに確認する方法
はじめに
特定のデータベースに含まれるすべてのテーブルの文字セット(キャラクターセット)を、列名とあわせて一覧で確認したいケースはよくあります。そんなときは、INFORMATION_SCHEMA.Columns テーブルに対してクエリを実行するだけで、簡単に調べることができます。
文字セットを確認するためのMySQLクエリ
以下のSQLクエリを実行すると、指定したデータベース内のすべてのテーブルについて、文字セットを列名・テーブル名とともに取得できます。
mysql> SELECT COLUMN_NAME, TABLE_NAME, CHARACTER_SET_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'db_name';
各カラムの意味は次のとおりです。
- COLUMN_NAME:対象となる列(カラム)の名前
- TABLE_NAME:その列が属するテーブルの名前
- CHARACTER_SET_NAME:その列に設定されている文字セット。数値型など文字を持たない列の場合は
NULLが返されます
使用例
たとえば、以下のクエリでは「Alpha」というデータベース内のすべてのテーブルについて、列名とともに文字セットを取得しています。
mysql> SELECT COLUMN_NAME AS 'Column', TABLE_NAME, CHARACTER_SET_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'Alpha';
+---------+------------+--------------------+
| Column | TABLE_NAME | CHARACTER_SET_NAME |
+---------+------------+--------------------+
| Name | employee | latin1 |
| email | employee | latin1 |
| Name | student | latin1 |
| RollNo | student | NULL |
| Address | student | latin1 |
+---------+------------+--------------------+
5 rows in set (0.04 sec)
結果の読み方
上記の出力から、次のことが読み取れます。
employeeテーブルおよびstudentテーブルの文字列型の列には、latin1文字セットが設定されています。RollNo列はNULLと表示されています。これは、数値型など文字セットを持たない列であることを示しています。
まとめ
INFORMATION_SCHEMA.COLUMNS を参照すれば、データベース全体の文字セットの設定状況をひと目で把握できます。日本語などのマルチバイト文字を扱うアプリケーションでは、utf8mb4 が正しく設定されているかどうかを確認する際にも、このクエリが非常に役立ちます。文字化けやデータ破損を防ぐためにも、定期的にチェックしておくと安心です。
-
MySQLでINFORMATION_SCHEMA.TABLESを使ってテーブルの存在を確認する方法
INFORMATION_SCHEMA.TABLESとはMySQLでデータベース内に特定のテーブルがすでに存在するかどうかを確認したい場合、INFORMATION_SCHEMA.TABLESを利用するのが便利です。INFORMATION_SCHEMAは、データベースやテーブルなどのメタ情報を管理する特殊なスキーマであり、そこに対してクエリを実行することで、目的のテーブルが存在するかどうかを簡単に調べられます。基本構文SELECT TABLE_NAMEFROM INFORMATION_SCHEMA.TABLESWHERE TABLE_SCHEMA = yourDatabaseNameAND TAB
-
MySQLで全テーブルから特定のカラムを検索する方法|INFORMATION_SCHEMAの活用
MySQLでカラムの存在を確認する基本アプローチMySQLにおいて、データベース内のどのテーブルに特定のカラムが存在するかを調べたい場面は少なくありません。そんなときに役立つのが、システムビューである INFORMATION_SCHEMA.COLUMNS です。このビューを参照することで、スキーマ全体を横断して目的のカラムを持つテーブルを一括で特定できます。基本的な構文は以下のとおりです。SELECT table_name, column_nameFROM INFORMATION_SCHEMA.COLUMNSWHERE table_schema = SCHEMA()AND column_nam