2016-12-10 19 views
0
  1. 1つの列をUTF-8に設定してlatin1_に置くことは賢明ですか?それはクエリのパフォーマンスに影響を及ぼしますか(おそらく、いくつかのコンバージョンが呼び出されます)?または、すべてをUTF-8に設定する必要があります。 (ラテンの列はアプリケーションによって生成され、すべてlatin1_にあるので、utf-8に入れておく必要はなく、この場合はVARCHARの魔法使いがもっと重要です。私はそうでないとTEXTに切り替えるのは嫌ですする必要がある )。 Phpはそのテーブルに対してINSERT、SELECTおよびUPDATEを呼び出すだけです。おそらく、そのテーブルを2つのテーブルに分けると、魔女は私を2番目の質問に導きます。1つのテーブルの異なる照合順序と照合の問題

  2. php mysqli->接続文字セットがUTF-8に設定されていて、latin1_に設定されたテーブルを選択、挿入、および更新している場合は、そのままにしてもいいですか、それともutf-アプリケーションによってすべてlatin1_の列が発生してもあなたと呼ばれる任意の変換関数があるとlatin1_であり、また、VARCHARは、あなたがUTF-8に、クライアントの文字セットを設定するためにmysqli::set_charset()を使用する場合は、その後、)TEXTに

答えて

1

を切り替える必要がありますMySQLはすべての受信クエリがそのエンコーディングを使用することを期待します。 latin1 charsetを使用する列の値を含め、UTF-8のすべての結果も表示されます。

変換は自動的に行われ、少なくともいくらかのオーバーヘッドが発生します。

アプリケーションがどこにでもUTF-8を送信し、期待している限り、すべては問題ありません。もしそうでなければ、あなたは悪い時を過ごすでしょう。

エンコードを混在させるのは賢明ですか?いいえ、私はそう信じていません。

+0

VARCHARをTEXTフィールドに変更し、テーブル全体をUTF-8に変換することをお勧めしますか。 – Dime

+1

なぜVARCHARをTEXTに変更しますか?たとえば、MySQLの非常に古いバージョンを使用していない限り、VARCHAR(32)は使用される文字セットに関係なく32文字をサポートします。 http://stackoverflow.com/questions/1997540/mysql-varchar-lengths-and-utf-8 – ShiraNai7

+0

問題は、それは非常に正確に計算され、私はVARCHAR(20 000)とVARCHAR(40 000)の2つのフィールドが必要なので、UTF -8はそれをサポートすることができません(サイズはバイト単位で制限されています)。 UTF-8が使用されている場合、テーブルの最大VARCHARは〜21000です!ですから、質問はTEXT UTF-8に変更するか、latin VARCHARのままにして自動変換を行います。何を使うのが速いでしょうか? (私は5.6.34のmysqlバージョンを持っています) – Dime

関連する問題