SET CHARACTER SET utf8
SET NAMES utf8
aslında character_set_connection
sıfırlanır sonra ve collation_connection
@@character_set_database
ve {[(5) kullanarak, ]} sırasıyla.
manual bildiren
SET NAMES x
eşdeğerdir
SET character_set_client = x;
SET character_set_results = x;
SET character_set_connection = x;
ve SET CHARACTER SET x
eşdeğerdir
SET character_set_client = x;
SET character_set_results = x;
SET collation_connection = @@collation_database;
oysa SET collation_connection = x
, aynı zamanda dahili SET character_set_connection = <<character_set_of_collation_x>>
çalıştırır ve SET character_set_connection = x
içten uygular, aynı zamanda SET collation_connection = <<default_collation_of_character_set_x
.
Yani aslında character_set_connection
için @@character_set_database
ve collation_connection
için @@collation_database
sıfırlama ediyoruz. Manuel bu değişkenlerin kullanımını açıklıyor:
What character set should the server
translate a statement to after
receiving it?
For this, the server uses the
character_set_connection and
collation_connection system variables.
It converts statements sent by the
client from character_set_client to
character_set_connection (except for
string literals that have an
introducer such as _latin1 or _utf8).
collation_connection is important for
comparisons of literal strings. For
comparisons of strings with column
values, collation_connection does not
matter because columns have their own
collation, which has a higher
collation precedence.
Bu Özetle, kodlama / kodlama prosedürü MySQL sorgu ve sonuçlarını işlemek için kullandığı bir çok adım şey:
- MySQL
character_set_client
olarak kodlanmış olarak gelen sorgu davranır.
- MySQL
character_set_client
içine gelen açıklama dönüşümü character_set_connection
- sütun dize değerlerini karşılaştırırken MySQL verilen veritabanı sütununun chracter setine
character_set_connection
adlı dize değerini dönüşümü ve sıralama ve karşılaştırma yapmak için sütun harmanlama kullanır değerleri.
- MySQL
character_set_results
(bu gibi üzerine sütun adları gibi sonuç meta sonuç verileri içerir yanı sıra) kodlanmış sonuç kümesi kurar
Yani bir SET CHARACTER SET utf8
tam UTF-8 desteği sağlamak için yeterli olmaz durum olabilir. latin1
ve utf8
-charset ile tanımlanmış sütunlar varsayılan veritabanı karakter seti düşünün ve yukarıda anlatılan adımları geçmesi. latin1
UTF-8 adımda karakter bilgileri kaybedebilirsiniz kapsayabilir tüm karakterleri kapsamaz gibi 3.
- Step 3: Given that your query is encoded in UTF-8 and contains characters that cannot be represented with
latin1
, bu karakterler sorgu başarısız yapma latin1
(varsayılan veritabanı karakter kümesi) için utf8
adlı kodlama kayıp olacak .
Bu yüzden SET NAMES ...
karakter kümesi konuları işlemek için doğru yol olduğunu söylemek güvenli olduğunu düşünüyorum. Ben MySQL sunucu değişkenlerini kurma doğru eklemek olsa bile (tüm reuired değişkenler statik ayarlanabilir sizin my.cnf
) her gerekli ekstra sorgu performans yükü sizi kurtarır bağlayın.