2016-10-08 15 views
0

はちょうど今、私は単なる偶然では前に遭遇していなかった問題に遭遇しましたutf8_mb4と私のデータベース内でエンコードするいくつかの列も同様です。取り扱い混合UTF8とutf8mb4 mysqliの&PHP

ここで、実際には、utf8エンコードフィールドから来るアクセント付き文字を正しく処理しないPHPの問題に遭遇しました。

今、私はutf8utf8mb4の結果が混ざっていることに固執しています。私のデータ処理はあまり強くないので(私のためにすべてを処理したフレームワークを使用するために使用されていました)、私はこれをどうすれば最もうまく解決できるのかよくわかりません。

私は、次のオプションについて考えている:

1)utf8mb4照合の代わりに、いくつかの例外を除いてutf8に私の全体のデータベースを設定します。

2)それを変更するmysqli_set_charset()を使用し、単にクエリは、データが今

を区切られたばかりことを確認し、これらのいずれもが私には素晴らしいアイデアのように見えるが、私は本当に任意のより良い解決策を考えることはできません。

それでは、残りの質問があります:

  • は大きなパフォーマンスの変化でutf8mb4代わりのutf8に私の全体のデシベルを設定するのでしょうか?私はutf8mb4がより大きく、ゆっくりであることを認識しています。なぜなら、最初の問題の列でのみ使用しようとしたのです。
  • mysqli_charsetutf8mb4にある場合でも、PHPハンドルutf8がうまくエンコードされる方法がありますか?
  • 良いアイデアはありますか?

私はこの件に関して本当に迷っています。私は正直なところ、どのオプションが最適か推測できません。私はあなたのデータベースをutf8mb4に変換する方法の違いを説明しているリンクを返してくれるだけなので、あまり役に立ちませんでしたので、この賢いSOの同僚の考えを聞いて大変ありがとうございます!

この特定のケースで列:

enter image description here

PHPの文字エンコーディング検出を含む私の応答:

arri�n = UTF-8 
bolsward = ASCII 
go�nga = UTF-8 
lo�nga = UTF-8 
echt = ASCII 
echteld = ASCII 
echten (drenthe) = ASCII 
echten (friesland) = ASCII 
echtenerbrug = ASCII 
echterbosch = ASCII 

マイmysqliの文字セット: mysqli_set_charset($this->getConn(), "utf8mb4");

- と私はちょうど実現問題は私のmysqli_set_charsetでした。実際にそこのアンダースコアに使用されていました...

答えて

1

スペルはutf8mb4(アンダースコアなし)です。

Trouble with utf8 characters; what I see is not what I storedを参照してください。 特に、「あなたがすべきことの概要」の解答を読んでください。

db全体を変更する必要はありません。選択した列に対してのみutf8mb4を指定するのは問題ありません。

接続にはutf8mb4を使用する必要がありますが、'UTF-8'を指定します。これは、外部世界ではMySQLのutf8mb4に相当します。 MySQLのutf8utf8mb4のサブセットです。 utf8mb4とutf8サブセットの間で共通の文字を転送するには、それほど大きくなく、遅くはありません(注:ハイフンとアンダースコアを正確に使用しています)。

utf8mb4絵文字は4バイトなので、他のほとんどの文字よりも大きくなりますが、4バイトで構いません。それを汗ばませないでください。

+0

私はあなたの答えを他の質問で読んだのですが、私の問題は特に黒い菱形です。 今、あなたが最初に言ったことはすべてあなたが言っています。私のメタタグ、PHPヘッダ、私が持っているすべての文字セットは、ここに書かれている通り、 'UTF-8'に設定されています。文字列ごとに文字セットを取得し、特殊文字を含むすべての文字列に対して 'UTF-8'を返しました。 (非特殊文字列の場合は 'ASCII ')。私が今考えることのできる唯一のことは、PHPMyadminからデータベースに直接データを入力することです(しかし、クエリーを通じて)。そうかもしれない?私は今失っている。 – NoobishPro

+0

Yeeeeeep、他の投稿のあなたの答えのおかげで、最後に解決しました。 これは 'mysqli_set_charset()'にかなり遅れてしまいました。私は特に 'utf8'や' utf8mb4'を使用しなければならず、 'UTF-8'を使用しなければなりません。また、私はPHPMyAdminという命名法を使用していましたが、それは明らかに非常に愚かでした。 (私はそこからアンダースコアのスペルをもらった!) ありがとう!あなたは私の人、ビールに値する! – NoobishPro

+0

賞賛いただきありがとうございます。私は自問自答の質問に私のアドバイスを数年かけて過ごしました。そのQ&A(またはこの1つ)にスペルミスがあると言っていますか?もしそうなら、私はそれを修正する必要があります。 –