グジャラート語はરેલવે
を開始します 、 正しい?そして、マラヤーラム語はനേപ
を開始します 、 正しい?そして、英語にはBureau’s
が含まれているはずです。 。
これは
の典型的なケースです- クライアントにあるバイトはutf8で正しくエンコードされています。 (
Bureau
utf8の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文字を表すと主張しています。