グジャラート語はરેલવેを開始します 、 正しい?そして、マラヤーラム語はനേപを開始します 、 正しい?そして、英語にはBureau’sが含まれているはずです。 。
これは
の典型的なケースです- クライアントにあるバイトはutf8で正しくエンコードされています。 (
Bureauutf8のAscii/latin1サブセットでエンコードされます。しかし、’アスキーアポストロフィではありません。) -
SET NAMES latin1に接続しました (またはset_charset('latin1')または...)、おそらくデフォルトで。 (utf8である必要があります 。) - テーブルの列は
CHARACTER SET latin1として宣言されました 。 (または、テーブル/データベースから継承された可能性があります。)(utf8である必要があります。 。)
データの修正 は「2ステップALTER」です。
ALTER TABLE Tbl MODIFY COLUMN col VARBINARY(...) ...;
ALTER TABLE Tbl MODIFY COLUMN col VARCHAR(...) ... CHARACTER SET utf8 ...;
ここで、長さは十分に大きく、他の「...」には他のものがあります(NOT NULL 、など)はすでに列にありました。
残念ながら、処理する列が多い場合は、多くのALTERが必要になります。 MODIFYを実行できます(実行する必要があります)。 VARBINARYに必要なすべての列 ALTERsのペアの単一のテーブルの場合 。
コードの修正 接続としてutf8を確立することです。これは、PHPで使用されるAPIによって異なります。 ALTERs 列の定義を変更します。
編集
VARCHARがあります 間違ったCHARACTER SET 。したがって、રેલのような文字化けが表示されます 。ほとんどの変換手法は、રેલを保持しようとします 、しかしそれはあなたが必要とするものではありません。代わりに、VARBINARYへのステップを踏みます latin1でエンコードされた文字を表すビットの古い定義を無視しながら、ビットを保持します。 2番目のステップでもビットは保持されますが、utf8文字を表すと主張しています。