すべてのテーブルが「utf8_unicode_ci」として照合された Mysql データベースがあります。また、php を使用してデータベースに書き込んだすべてのデータは、utf8 でエンコードされていました。しかし、mysql 接続エンコーディングを utf8 に設定するのを忘れていたため、おそらくデフォルトで ISO-8859 に設定されていました。
長い間、これは問題ではありませんでした。phpMyAdmin などのツールでは特殊文字が正しく表示されませんでしたが、間違った接続エンコーディングを使用し続けている限り、php アプリケーションにロードするとデータは正しく表示されました。
しかし今、別のアプリケーションからデータベースを使用する必要があります。これは (正しく) 接続エンコーディングとして ISO-8859 を使用せず、壊れた特殊文字を取得します。
正しい接続エンコーディングを使用できるように、データベースを変換したいと考えています。
私はすでにこれを試しました: mysqlの間違った接続エンコーディング
しかし、私は私を助けません。解決策に最も近いのは「ut8_decode(utf8_decode($data))」でした。しかし、これは特殊文字で始まるフィールドを破壊します。
追加情報:
したがって、次のようなことが起こります。
私のアプリケーションは、いくつかの utf8 データをデータベースに送信します。
Mysql はデータを取得しますが、(接続エンコーディングのために) utf8 ではないと判断し、'utf8_unicode_ci' 照合に適合するように変換します。
私のphpアプリケーションがデータベースからデータを読み取ると、mysqlは以前の変換を元に戻すように見えるので、私のphpアプリからはすべて正常に見えます。