MAGAZINE

ルーターマガジン

インフラ/運用

PostgreSQLのmysql_fdwを使ったUTF8MB4外部テーブルの文字化け防止策

2025.02.07
Pocket

PostgreSQLでmysql_fdwを使い、UTF8MB4の外部テーブルの文字化けを防ぐ方法

この記事では、PostgreSQLのプラグイン「mysql_fdw」を活用し、MySQLのテーブル(文字コードがUTF8MB4)を文字化けせずにPostgreSQLでSELECTする方法を解説します。

結論:SET NAMES utf8mb4を設定する

結論として、CREATE SERVEROPTIONSSET NAMES utf8mb4 を指定することで、文字化けの問題を解決できます。

CREATE SERVER foreign_db
    FOREIGN DATA WRAPPER mysql_fdw
    OPTIONS (host 'localhost', port '3306', init_command 'SET NAMES utf8mb4');

character_set オプションでは解決できない理由

mysql_fdw のGitHubのREADMEには、character_set オプションが存在します。

GitHub: mysql_fdw - CREATE SERVER Options

しかし、このオプションを指定しても、文字コードの設定は正しく反映されませんでした。おそらく、mysql_fdw がPostgreSQLとMySQLの文字コードを統一しようとする際に問題が発生していると考えられます。

PostgreSQLのUTF8対応とUTF8MB4の違い

PostgreSQL公式ドキュメント の仕様を確認すると、PostgreSQLのUTF8は4バイト文字に対応しているため、 character_set オプションではUTF8MB4を適切に設定できなかった可能性があります。

まとめ

MySQLのUTF8MB4の外部テーブルを文字化けなくPostgreSQLで扱うには、CREATE SERVEROPTIONSSET NAMES utf8mb4 を追加するのが最適な解決策です。character_set オプションでは対応できないため、適切な設定を行いましょう。

Pocket

CONTACT

お問い合わせ・ご依頼はこちらから