sql >> データベース >  >> RDS >> Mysql

アラビア文字がデータベースに挿入されないのはなぜですか?

    これは、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
    

    関連項目:




    1. 正規表現を使用して数字のみを取得する

    2. SQLサーバーでの日付の取得、CURRENT_TIMESTAMPとGetDate()

    3. Google Cloud SQLforMySQLをオンプレミスサーバーに移行する

    4. ブールフィールドのインデックス作成でパフォーマンスが向上しますか?