MySQLクエリの出力をUTF-8に変換する方法:CONVERTとCASTの使い方
MySQLクエリの出力をUTF-8に変換する方法
MySQLクエリの出力結果をUTF-8に変換するには、CAST()関数またはCONVERT()関数を使用します。ここでは、MySQLバージョン8.0.12を使って具体的な手順を解説します。まず、使用中のバージョンを確認しておきましょう。
mysql> select version(); +-----------+ | version() | +-----------+ | 8.0.12 | +-----------+ 1 row in set (0.00 sec)
utf8ではなくutf8mb4を推奨
MySQL 8.0では「utf8」は「utf8mb4」のエイリアスとして扱われるため、utf8を指定すると警告が表示される場合があります。この警告を回避するには、明示的にutf8mb4を指定するのが安全です。
注意: 現在のバージョンのMySQLでは、「utf8」ではなく「utf8mb4」を使用してください。utf8mb4なら絵文字など4バイトのUTF-8文字も正しく扱えます。
出力をUTF-8に変換する基本構文
MySQLクエリの出力をUTF-8に変換するための基本構文は以下の通りです。
SELECT yourColumnName1, convert(yourColumnName2 USING utf8) as anyVariableName FROM yourTableName;
また、CAST()とCONVERT()を組み合わせた別の書き方も可能です。
SELECT yourColumnName1, CONVERT(CAST(yourColumnName2 as BINARY) USING utf8) as anyVariableName FROM yourTableName;
サンプルテーブルの作成
上記の構文の動きを理解するために、実際にテーブルを作成してみましょう。テーブル作成用のクエリは次の通りです。
mysql> create table ConvertOutputtoUtf8Demo
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> Name varchar(20),
-> Age int,
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (0.79 sec)
レコードの挿入
続いて、INSERTコマンドを使ってテーブルにいくつかのレコードを追加します。
mysql> insert into ConvertOutputtoUtf8Demo(Name,Age) values('John',24);
Query OK, 1 row affected (0.78 sec)
mysql> insert into ConvertOutputtoUtf8Demo(Name,Age) values('Larry',21);
Query OK, 1 row affected (0.15 sec)
mysql> insert into ConvertOutputtoUtf8Demo(Name,Age) values('Carol',26);
Query OK, 1 row affected (0.12 sec)
mysql> insert into ConvertOutputtoUtf8Demo(Name,Age) values('Mike',27);
Query OK, 1 row affected (0.18 sec)
mysql> insert into ConvertOutputtoUtf8Demo(Name,Age) values('Sam',22);
Query OK, 1 row affected (0.15 sec)
テーブル内の全レコードを表示する
SELECT文を実行して、テーブル内のすべてのレコードを確認しましょう。
mysql> select *from ConvertOutputtoUtf8Demo;
実行結果は以下の通りです。
+----+-------+------+ | Id | Name | Age | +----+-------+------+ | 1 | John | 24 | | 2 | Larry | 21 | | 3 | Carol | 26 | | 4 | Mike | 27 | | 5 | Sam | 22 | +----+-------+------+ 5 rows in set (0.00 sec)
CONVERT()を使った変換クエリの実行
それでは、MySQLクエリの出力をUTF-8に変換してみましょう。
mysql> select Id,convert(Name using utf8) as ConvertToUtf8 from ConvertOutputtoUtf8Demo;
実行結果は以下の通りです。
+----+---------------+ | Id | ConvertToUtf8 | +----+---------------+ | 1 | John | | 2 | Larry | | 3 | Carol | | 4 | Mike | | 5 | Sam | +----+---------------+ 5 rows in set, 1 warning (0.00 sec)
CAST()とCONVERT()を組み合わせた変換クエリ
もうひとつの方法として、次のようなクエリも利用できます。
mysql> SELECT Id,CONVERT(CAST(Name as BINARY) USING utf8) as ConvertToUtf8 FROM ConvertOutputtoUtf8Demo;
実行結果は以下の通りです。
+----+---------------+ | Id | ConvertToUtf8 | +----+---------------+ | 1 | John | | 2 | Larry | | 3 | Carol | | 4 | Mike | | 5 | Sam | +----+---------------+ 5 rows in set, 1 warning (0.00 sec)
まとめ
MySQLクエリの出力をUTF-8に変換するには、CONVERT()関数を単体で使う方法と、CAST()で一度BINARY型に変換してからCONVERT()を適用する方法の2つがあります。なお、現在のMySQLではutf8はutf8mb4のエイリアスとして扱われるため、新規開発ではutf8mb4を明示的に指定することが推奨されます。
-
MySQLのクエリ結果をテキストファイル(.txt)やExcelで使える形式に保存する方法
MySQLでクエリの出力結果をテキストファイルに保存したい場合は、INTO OUTFILEコマンドを使用します。この記事では、実際にテーブルを作成し、データを登録したうえで、クエリ結果を「QueryOutput.txt」というファイルに出力するまでの一連の手順を具体的な例とともに解説します。 1. サンプルテーブルの作成 まず、出力確認用のテーブルを作成しましょう。 mysql> create table SaveintoTextFile -> ( -> id int, -> name varchar(100) -> ); Query
-
MySQLでタイムスタンプを月に変換するクエリの書き方
タイムスタンプを月に変換する基本構文MySQLでタイムスタンプ(UNIXタイムスタンプ)を月に変換するには、FROM_UNIXTIME()関数とMONTH()関数を組み合わせて使用します。基本的な構文は以下の通りです。select month(from_unixtime(yourColumnName)) from yourTableName;FROM_UNIXTIME()関数がUNIXタイムスタンプを日時形式に変換し、その結果に対してMONTH()関数を適用することで、月の数値(1〜12)を取得できます。サンプルテーブルの作成まず、動作確認用のテーブルを作成しましょう。mysql> cr