Bunu düşün:
- Veriyi veritabanında şu şekilde saklıyorsunuz:
latin1
- Veriler dahili olarak mysqld tarafından işleniyor
latin1
İşletim sisteminden veya bağlantıdan gelen veriler ise utf8
, mysqld bunu nasıl ele alacaktır?
En iyisini tahmin etmek veya ummak yerine, gelen karakter seti davranışını değiştirebilirsiniz. Hariç olmak üzere information_schema
ve mysql
, tüm veritabanlarını alıp varsayılan karakter kümesi ayarlı utf8
:
ALTER DATABASE dbname CHARACTER SET utf8;
Bununla birlikte gitmek için belirli bir koleksiyonunuz varsa, bunu yapın:
ALTER DATABASE dbname COLLATE 'utf8_general_ci';
Seçim yapabileceğiniz harmanlamalar şunlardır:
mysql> select * from information_schema.collations where CHARACTER_SET_NAME = 'utf8';
+--------------------+--------------------+-----+------------+-------------+---------+
| COLLATION_NAME | CHARACTER_SET_NAME | ID | IS_DEFAULT | IS_COMPILED | SORTLEN |
+--------------------+--------------------+-----+------------+-------------+---------+
| utf8_general_ci | utf8 | 33 | Yes | Yes | 1 |
| utf8_bin | utf8 | 83 | | Yes | 1 |
| utf8_unicode_ci | utf8 | 192 | | Yes | 8 |
| utf8_icelandic_ci | utf8 | 193 | | Yes | 8 |
| utf8_latvian_ci | utf8 | 194 | | Yes | 8 |
| utf8_romanian_ci | utf8 | 195 | | Yes | 8 |
| utf8_slovenian_ci | utf8 | 196 | | Yes | 8 |
| utf8_polish_ci | utf8 | 197 | | Yes | 8 |
| utf8_estonian_ci | utf8 | 198 | | Yes | 8 |
| utf8_spanish_ci | utf8 | 199 | | Yes | 8 |
| utf8_swedish_ci | utf8 | 200 | | Yes | 8 |
| utf8_turkish_ci | utf8 | 201 | | Yes | 8 |
| utf8_czech_ci | utf8 | 202 | | Yes | 8 |
| utf8_danish_ci | utf8 | 203 | | Yes | 8 |
| utf8_lithuanian_ci | utf8 | 204 | | Yes | 8 |
| utf8_slovak_ci | utf8 | 205 | | Yes | 8 |
| utf8_spanish2_ci | utf8 | 206 | | Yes | 8 |
| utf8_roman_ci | utf8 | 207 | | Yes | 8 |
| utf8_persian_ci | utf8 | 208 | | Yes | 8 |
| utf8_esperanto_ci | utf8 | 209 | | Yes | 8 |
| utf8_hungarian_ci | utf8 | 210 | | Yes | 8 |
| utf8_sinhala_ci | utf8 | 211 | | Yes | 8 |
+--------------------+--------------------+-----+------------+-------------+---------+
22 rows in set (0.03 sec)
Ayrıca koşabilirsin
mysql> show collation where charset='utf8';
+--------------------+---------+-----+---------+----------+---------+
| Collation | Charset | Id | Default | Compiled | Sortlen |
+--------------------+---------+-----+---------+----------+---------+
| utf8_general_ci | utf8 | 33 | Yes | Yes | 1 |
| utf8_bin | utf8 | 83 | | Yes | 1 |
| utf8_unicode_ci | utf8 | 192 | | Yes | 8 |
| utf8_icelandic_ci | utf8 | 193 | | Yes | 8 |
| utf8_latvian_ci | utf8 | 194 | | Yes | 8 |
| utf8_romanian_ci | utf8 | 195 | | Yes | 8 |
| utf8_slovenian_ci | utf8 | 196 | | Yes | 8 |
| utf8_polish_ci | utf8 | 197 | | Yes | 8 |
| utf8_estonian_ci | utf8 | 198 | | Yes | 8 |
| utf8_spanish_ci | utf8 | 199 | | Yes | 8 |
| utf8_swedish_ci | utf8 | 200 | | Yes | 8 |
| utf8_turkish_ci | utf8 | 201 | | Yes | 8 |
| utf8_czech_ci | utf8 | 202 | | Yes | 8 |
| utf8_danish_ci | utf8 | 203 | | Yes | 8 |
| utf8_lithuanian_ci | utf8 | 204 | | Yes | 8 |
| utf8_slovak_ci | utf8 | 205 | | Yes | 8 |
| utf8_spanish2_ci | utf8 | 206 | | Yes | 8 |
| utf8_roman_ci | utf8 | 207 | | Yes | 8 |
| utf8_persian_ci | utf8 | 208 | | Yes | 8 |
| utf8_esperanto_ci | utf8 | 209 | | Yes | 8 |
| utf8_hungarian_ci | utf8 | 210 | | Yes | 8 |
| utf8_sinhala_ci | utf8 | 211 | | Yes | 8 |
+--------------------+---------+-----+---------+----------+---------+
22 rows in set (0.00 sec)
mysql>
Bir veritabanının bağımsız karakter kümesini görmek için şunu çalıştırın:
mysql> show create database sample;
+----------+-------------------------------------------------------------------+
| Database | Create Database |
+----------+-------------------------------------------------------------------+
| sample | CREATE DATABASE `sample` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+-------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql>
Ayarlara gelince, bunu deneyebilirsiniz:
Çizgileri my.cnf
[mysqld]
character_set_database=utf8
character_set_server=utf8
sonra mysql'yi yeniden başlat
Bunu 01 Ağustos 2011 tarihinde tekrar tartıştım: Karakter Kümesi Kodlama Bir Tabloda
CAVEAT (Windows'daki MySQL DB Sunucuları için)
Bu komutlar
ALTER DATABASE dbname CHARACTER SET utf8;
ALTER DATABASE dbname COLLATE 'utf8_general_ci';
Windows'un dosyaları kilitleme biçimi nedeniyle MySQL'in Windows Sürümünde çalışmaz. Gerekli db.opt
olan veritabanı alt klasöründe bulunan dosya çağrılır datadir
.
Aşağıdakileri yapmanız gerekebilir:
- mysqldump o veritabanı (hiçbir veritabanı bilgi oluşturmak, sadece tablo oluşturma ve INSERTs)
- veritabanını bırak
- belirli karakter seti ve harmanlama ile veritabanı oluşturma
- çöplükte yeniden doldur
SONSÖZ
Ne yaparsanız yapın, istediğiniz efektleri alıp almadığınızı görmek için lütfen bir Geliştirme / Hazırlama Sunucusu üzerinde herhangi bir değişiklik yapın
GÜNCELLEME 2012-12-05 11:00 EDT
Sorularınız
Gerçekten değiştirmeli miyim?
Verilerin uygun şekilde işlenmesini garanti etmek için, elmadan elmaya sahip olduğunuzdan emin olmak isteyebilirsiniz. Bir karakter kümesi olarak hazırlanan ve veritabanını bir tabloya yükleyen ve muhtemelen verileri başka bir karakter kümesi gibi hizalayan veriler, mysqld öğesinin alındığında ve bir DB Bağlantısına geri gönderildiğinde gördüğü karakter kümesiyle verileri göstermeyecektir. Veritabanını bir Geliştirme / Hazırlama Sunucusuna yüklemeyi deneyin ve varsayılan karakter kümelerini ayarlamayı deneyin.
Neden bazı temerrütler, utf8
bazı temerrütler kullanılır latin1
?
Bu, MySQL Binary'nin işletim sistemi sürümüne bağlı olacaktır. latin1
Linux sürümleri Windows sürümlerinde olabilir utf8
.