これは、Mojibake として知られています。 。これはDBエンコーディングの問題ではなく、HTTPエンコーディングの問題です。あなたがしたようにPOSTリクエストの文字エンコードを設定することは確かに適切な解決策です。
質問マークは、両方のときに発生します 接続の側面は認識です 独自のエンコーディングの。片面のエンコードでカバーされていない送信/取得された文字は、疑問符に置き換えられます。 ISO-8859-1ではアラビア文字は使用されないため、疑問符に置き換えられます。これが文字化けとの違いです。文字化けでは、反対側で使用されているエンコーディングが実際に文字をサポートしているかどうかを確認せずに文字が送信されます。正しくエンコードされていない文字になってしまい、理解できない文字のシーケンスとして表示されます。
この特定のケースでは、JDBCドライバーはそれ自体がデフォルトでISO-8859-1を使用して文字をDBに送信していることを認識していますが、取得された文字はUTF-8にあります(MySQL JDBCドライバーはDBを参照しません)テーブルエンコーディング(この場合はUTF-8に適切に設定されていますが)。データをDBに送信する前に、UTF-8を使用して文字をデコードするようにJDBCドライバーに明示的に指示する必要があります。これは、次のようにJDBCURLのクエリ文字列パラメータとして定義されるJDBC接続プロパティとして実行されます。
jdbc:mysql://localhost:3306/db_name?useUnicode=yes&characterEncoding=UTF-8
コンテナ管理のデータソースを使用している場合は、ユーザー名とパスワードの場合と同じ方法で、これらのプロパティを個別に指定するだけです
useUnicode=yes
characterEncoding=UTF-8