Neden default_set_server latin1?


12

MySQL 5.5 kullanıyorum ve karakter kümesi ile ilgili değişkenler gösterdiğimde,

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

Ben değiştirmek gerekirse character_set_databaseve character_set_serverhiç utf8?

Yanıtlar:


8

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_schemave 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.optolan 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, utf8bazı temerrütler kullanılır latin1?

Bu, MySQL Binary'nin işletim sistemi sürümüne bağlı olacaktır. latin1Linux sürümleri Windows sürümlerinde olabilir utf8.


Merhaba, detaylı cevabınız için teşekkürler. Aslında sorularım onu ​​nasıl değiştireceğimiz değil, ama ... 1. Gerçekten değiştirmeli miyim? 2. Neden bazı varsayılanlar utf8 kullanır, ancak bazı varsayılanlar latin1 kullanır
Yoga

1
(önce tekrar teşekkürler) Bu, MySQL Binary'nin işletim sistemi sürümüne bağlıdır. <- Acımasız varsayılan arasına karıştırıldığı neden Ubuntu, olduğumda latin1ve utf8, örneğin character_set_connectionutf8 ama character_set_databaselatin1 olduğunu
Yoga

1
@Rolando [mysqld] character_set_database=utf8 character_set_server=utf8çalışmıyor.
Jorge B.

Hala anlamıyorum ... ana işletim sistemi bazı aptal sınırlı karakter kullanıyor olsa bile, girişi kabul etse latin1ve dönüştürmek zorunda olsa bile, herhangi bir karakteri temsil edebilen bir karakter kümesinde varsayılan olarak veritabanını depolamamalıdır . depo için?
Andy
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.