0
0

【AWS】utf8mb4で「????」が表示された時はskip-character-set-client-handshakeも確認する

Posted at

概要

RDSのパラメータグループで、文字セットをutf8mb4にしたのに、4バイト文字を連携すると「????」と表示されてしまいました。
解決方法を紹介します。

前提とエラー内容

RDSのエンジンバージョンについては、Aurora3のmysql8.0を利用。
Clusterのパラメータグループにて、以下はすべてutf8mb4にしました。

character_set_client
character_set_connection
character_set_database
character_set_filesystem
character_set_results
character_set_server

RDSデータベースの方を確認しても、DB自体やテーブルもそれぞれutf8mb4になっていました。

ここでアプリを通して4バイトの特殊文字などを連携すると「????」と返されてしまいます。

4バイト文字とは、絵文字や一部の旧字体などが該当し、utf8mb4文字セットではこれらを含むすべてのUnicode文字をサポートしています。本来ならば、正常に表示されるべきです。

解決方法

原因は、パラメータグループのskip-character-set-client-handshakeにありました。
公式ドキュメントはこちら。

クライアントによって送信された文字セット情報を無視しません。 クライアント情報を無視して、サーバーのデフォルトの文字セットを使用するには、--skip-character-set-client-handshake を使用します。これにより、MySQL は MySQL 4.0. のように動作します。

ここがデフォルトのままだと「-」と表示されており、これだと、Mysqlサーバはクライアントから送信された文字セット情報を無視し、サーバー側のデフォルト文字セットを使用する、という意味になります。

これが原因で、クライアントとサーバ間で文字セットの不一致が発生し、4バイト文字(絵文字や一部の旧字体など)が正しく処理されず、「????」と表示されたと考えられます。

そこで、この値を1にすると、サーバはクライアントから送信された文字セット情報を認識し、クライアントとサーバ間で文字セットが一致するようになりました。結果、旧字体も正常に出力されるようになりました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0