MAGAZINE
ルーターマガジン
インフラ/運用
PostgreSQLのmysql_fdwを使ったUTF8MB4外部テーブルの文字化け防止策
2025.02.07

PostgreSQLでmysql_fdwを使い、UTF8MB4の外部テーブルの文字化けを防ぐ方法
この記事では、PostgreSQLのプラグイン「mysql_fdw」を活用し、MySQLのテーブル(文字コードがUTF8MB4)を文字化けせずにPostgreSQLでSELECTする方法を解説します。
結論:SET NAMES utf8mb4
を設定する
結論として、CREATE SERVER
の OPTIONS
に SET 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 SERVER
の OPTIONS
に SET NAMES utf8mb4
を追加するのが最適な解決策です。character_set
オプションでは対応できないため、適切な設定を行いましょう。
CONTACT
お問い合わせ・ご依頼はこちらから