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

保存されたデータの奇妙な文字エンコード、古いスクリプトはそれらにうまく表示されています新しいものは表示されません

    要するに、これはこれまでに何千回も議論されてきたからです:

    1. PHPは、"漢字"などの文字列を保持します 、UTF-8でエンコードされています。このためのバイトはE6 BC A2 E5 AD 97です。 。
    2. この文字列は、latin1に設定されているデータベース接続を介して送信されます
    3. データベースはバイトを受信しますE6 BC A2 E5 AD 97 、それらがlatin1を表すと考える 文字。
    4. データベースには文字æ¼¢å­が保存されます (E6 BC A2 E5 AD 97の文字 latin1にマップします 。
    5. 同じプロセスを逆にすると、PHPは同じバイトを受け取り、UTF-8として扱います。データベースが文字を適切に処理しない場合でも、ラウンドトリップはPHPでは正常に機能します。

    したがって、ここでの問題は、データがデータベースに入力されたときにデータベース接続が正しく設定されていないことでした。データベース内のデータを正しい文字に変換する必要があります。これを試してください:

    SELECT CONVERT(BINARY CONVERT(field_name USING latin1) USING utf8) FROM table_name
    

    多分utf8 ここで必要なものではありません、実験してください。それが機能する場合は、これをUPDATEに変更します データを永続的に更新するステートメント。



    1. OracleのBITAND()関数

    2. SQL SELECT MIN

    3. JPAフラッシュとコミット

    4. 別のユーザーアカウント(macOS)からのmySQLインスタンスの回復