MySQLで非ASCII文字を検出する方法:HEX関数とREGEXPを使った実践テクニック
MySQLで非ASCII文字を見つけるには?
非ASCII文字とは、ポンド記号(£)、商標記号(™)、プラスマイナス記号(±)など、ASCIIコードの範囲外に属する文字のことです。データベースのクリーニングや文字化け対策では、テーブル内に含まれる非ASCII文字を特定したいケースがよくあります。
ここでは、MySQLでテーブルから非ASCII文字を含むレコードを検出する手順を、具体的な例とともに解説します。
ステップ1:テーブルを作成する
まず、CREATE文を使って検証用のテーブルを作成します。
mysql> CREATE table NonASciiDemo
-> (
-> NonAScii varchar(100)
-> );
Query OK, 0 rows affected (0.61 sec)
ステップ2:サンプルデータを挿入する
次に、INSERT文を使ってテーブルにレコードを挿入します。ここでは、非ASCII文字を含むレコードと、純粋なASCII文字のみのレコードを混在させて登録します。
mysql> INSERT into NonASciiDemo values('-,-');
Query OK, 1 row affected (0.18 sec)
mysql> INSERT into NonASciiDemo values(' ');
Query OK, 1 row affected (0.23 sec)
mysql> INSERT into NonASciiDemo values('£');
Query OK, 1 row affected (0.30 sec)
mysql> INSERT into NonASciiDemo values('123abcd£');
Query OK, 1 row affected (0.24 sec)上記のように4件のレコードが挿入されました。このうち「£」を含む2件が非ASCII文字を含むレコードで、残りの2件はASCII文字のみで構成されています。
ステップ3:全レコードを確認する
SELECT文でテーブル内のすべてのレコードを表示してみましょう。
SELECT * from NonASciiDemo;
実行結果は以下の通りです。
+----------+
| NonAScii |
+----------+
| -,- |
| |
| £ |
| 123abcd£ |
+----------+
4 rows in set (0.00 sec)
非ASCII文字を検出する構文
非ASCII文字を検出するには、HEX関数とREGEXP演算子を組み合わせます。ポイントは、ASCII文字の16進数表現が「00〜7F」の範囲(先頭桁が0〜7)に収まるという性質を利用することです。
基本構文は以下の通りです。
SELECT * FROM yourTableName
WHERE NOT HEX(yourColumnName) REGEXP '^([0-7][0-9A-F])*$';
この構文では、カラムの値を16進数に変換し、その全体が「0〜7で始まる2桁の組み合わせ」のみで構成されているかどうかを正規表現で判定しています。NOTによって、このパターンに一致しない(=非ASCII文字を含む)レコードだけが抽出されます。
実際のクエリ実行例
上記の構文をサンプルテーブルに適用すると、次のようになります。
mysql> SELECT * FROM NonASciiDemo
WHERE NOT HEX(NonAScii) REGEXP '^([0-7][0-9AF])*$';
実行結果:
+----------+
| NonAScii |
+----------+
| £ |
| 123abcd£ |
+----------+
2 rows in set (0.00 sec)
ご覧の通り、「£」を含む2件のレコードだけが正しく抽出されました。この手法を使えば、マルチバイト文字や特殊記号が混入したデータを簡単に洗い出すことができます。データインポート後の検証や、文字コード関連のトラブルシューティングにぜひ活用してください。
-
MySQLで非ASCII文字を検出する方法:HEX関数とREGEXPを使った実践テクニック
MySQLで非ASCII文字を見つけるには?非ASCII文字とは、ポンド記号(£)、商標記号(™)、プラスマイナス記号(±)など、ASCIIコードの範囲外に属する文字のことです。データベースのクリーニングや文字化け対策では、テーブル内に含まれる非ASCII文字を特定したいケースがよくあります。ここでは、MySQLでテーブルから非ASCII文字を含むレコードを検出する手順を、具体的な例とともに解説します。ステップ1:テーブルを作成するまず、CREATE文を使って検証用のテーブルを作成します。mysql> CREATE table NonASciiDemo-> (-> NonAS
-
MySQLでカラムがAUTO_INCREMENT設定かどうかを確認する方法
MySQLで特定のカラムがAUTO_INCREMENTに設定されているかどうかを確認したい場合は、information_schema.columnsテーブルを参照するのが便利です。以下のSQL構文を使用することで、簡単に調べることができます。select COLUMN_NAME from information_schema.columns where TABLE_SCHEMA=yourDatabaseName and TABLE_NAME=yourTableName and EXTRA like %auto_increment%;このクエリでは、データベース名(TABLE_SCHEMA)と