My.cnf içinde MySQL varsayılan karakter kümesi UTF-8 olarak değiştirilsin mi?


334

Şu anda PHP'de karakter setini uygulamamızda UTF-8 olarak ayarlamak için aşağıdaki komutları kullanıyoruz .

Bu biraz ek yük olduğundan, bunu MySQL'de varsayılan ayar olarak ayarlamak istiyoruz. Bunu /etc/my.cnf içinde veya başka bir yerde yapabilir miyiz?

SET NAMES 'utf8'
SET CHARACTER SET utf8

/Etc/my.cnf içinde varsayılan bir karakter kümesi aradım, ancak karakter setleri hakkında hiçbir şey yok.

Bu noktada, MySQL karakter kümesi ve harmanlama değişkenlerini UTF-8 olarak ayarlamak için aşağıdakileri yaptım:

skip-character-set-client-handshake
character_set_client=utf8
character_set_server=utf8

Bunu halletmek için doğru bir yol var mı?


19
Daha iyi bir varsayılan değer utf8mb4, yani tam Unicode desteği olan gerçek UTF-8 olacağını unutmayın . Bkz . MySQL veritabanlarında tam Unicode desteği .
Mathias Bynens

@Jorre utf8mb4, bu otururken tehlikeli bir emsal teşkil etmek için bunu değiştirmeye itiraz eder misiniz ?
Evan Carroll

Yanıtlar:


424

Varsayılanı UTF-8 olarak ayarlamak için, my.cnf dosyasına aşağıdakileri eklemek istersiniz

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8


[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8

Varolan bir DB için karakter kümesini değiştirmek istiyorsanız, bana bildirin ... sorunuz doğrudan belirtmedi, bu yüzden yapmak istediğiniz şey olup olmadığından emin değilim.


18
Yukarıdaki my.cnf ayarları da benim için çalıştı. Ayrıca, tablonun doğru ayarlandığından emin olmak zorunda kaldım, örneğin ALTER TABLE TableKARAKTER SETİNE DÖNÜŞÜM utf8 COLLATE utf8_unicode_ci;
Chris Livdahl

8
MySQL 5.5 için çalışmaz. Ben kullandım: <br/> [mysqld] # utf-8 collation-server = utf8mb4_unicode_ci init-connect = 'SET NAMES utf8mb4' karakter-set-server = utf8mb4 ve utf8mb4 yukarıda belirtilen başka bir yerde.
Champ

12
Ubuntu 12.04'te, bu benim için çalıştı - eğer ilk satırı kaldırırsam [mysqld].
Brandon Bertelsen

4
Görünüşe göre [mysqld] bölümünde varsayılan karakter kümesine izin verilmiyor
marsbard

4
UTF-8 istediğiniz gibi ise, MySQL'in utf8karakter setini kullanmayın . Bunun yerine kullanın utf8mb4.
Mathias Bynens

255

MySQL'in son sürümü için,

default-character-set = utf8

soruna neden olur. Sanırım reddedildi.

As Justin Topu diyor " MySQL 5.5.12 yükseltme ve şimdi MySQL başlamaz yapmanız gerekir:

  1. Bu yönergeyi kaldırın ve iyi olmalısınız.

  2. Ardından yapılandırma dosyanız (örneğin '/etc/my.cnf') şöyle görünmelidir:

    [mysqld]
    collation-server = utf8_unicode_ci
    init-connect='SET NAMES utf8'
    character-set-server = utf8
  3. MySQL'i yeniden başlatın.

  4. MySQL'inizin UTF-8 olduğundan emin olmak için MySQL isteminizde aşağıdaki sorguları çalıştırın:

    • İlk sorgu:

       mysql> show variables like 'char%';

      Çıktı şöyle görünmelidir:

       +--------------------------+---------------------------------+
       | Variable_name            | Value                           |
       +--------------------------+---------------------------------+
       | character_set_client     | utf8                            |
       | character_set_connection | utf8                            |
       | character_set_database   | utf8                            |
       | character_set_filesystem | binary                          |
       | character_set_results    | utf8                            |
       | character_set_server     | utf8                            |
       | character_set_system     | utf8                            |
       | character_sets_dir       | /usr/local/mysql/share/charsets/|
       +--------------------------+---------------------------------+
    • İkinci sorgu:

       mysql> show variables like 'collation%';

      Ve sorgu çıktısı:

       +----------------------+-----------------+
       | Variable_name        | Value           |
       +----------------------+-----------------+
       | collation_connection | utf8_general_ci |
       | collation_database   | utf8_unicode_ci |
       | collation_server     | utf8_unicode_ci |
       +----------------------+-----------------+

İlk satırınız max_allowed_packet = 64M bu UTF8 sorunuyla herhangi bir şekilde ilgili mi?
malhal

Ben var character_set_filesystem | utf8. Emin değilim, sorun değil mi?
Lem amca

1
MariaDB v5.5 üzerinde çalıştı ve işe yarıyor, teşekkürler! mysql Ver 15.1 Distrib 5.5.35-MariaDB, for debian-linux-gnu (x86_64) using readline 5.1
cenk

Kaldırmanız gerekmediğini düşünüyorum default-character-set, bunun yerine loose-default-character-set = utf8'gevşek' ile önek olarak değiştirebilirsiniz . Kullanmanızmysqlbinlog gerekiyorsa bu mutlu olur - google for: "gevşek-varsayılan-karakter kümesi" mysqlbinlog .
KajMagnus

init-connect='SET NAMES utf8'gerçekten gerekli? Değilse, performans olmadan kesinlikle yapabiliriz.
datasn.io

56

Bu sorunun zaten çok fazla cevabı var, ancak Mathias Bynens, daha iyi UTF-8 desteğine sahip olmak için 'utf8' yerine 'utf8mb4' kullanılması gerektiğini belirtti ('utf8' 4 bayt karakteri desteklemiyor , ekler üzerinde alanlar kesiliyor ). Bunun önemli bir fark olduğunu düşünüyorum. Burada, varsayılan karakter kümesinin ve harmanlamanın nasıl ayarlanacağıyla ilgili başka bir cevap var. Bir yığın kaka (💩) eklemenizi sağlayacak.

Bu MySQL 5.5.35 üzerinde çalışır.

Bazı ayarların isteğe bağlı olabileceğini unutmayın. Hiçbir şeyi unutmadığımdan tam olarak emin olmadığım için, bu yanıtı bir topluluk wiki'si yapacağım.

Eski Ayarlar

mysql> SHOW VARIABLES LIKE 'char%'; SHOW VARIABLES LIKE 'collation%';
+--------------------------+----------------------------+
| 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/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | utf8_general_ci   |
| collation_database   | latin1_swedish_ci |
| collation_server     | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set (0.00 sec)

Yapılandırma

# 💩 𝌆
# UTF-8 should be used instead of Latin1. Obviously.
# NOTE "utf8" in MySQL is NOT full UTF-8: http://mathiasbynens.be/notes/mysql-utf8mb4

[client]
default-character-set = utf8mb4

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

[mysql]
default-character-set = utf8mb4

Yeni Ayarlar

mysql> SHOW VARIABLES LIKE 'char%'; SHOW VARIABLES LIKE 'collation%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8mb4                    |
| character_set_connection | utf8mb4                    |
| character_set_database   | utf8mb4                    |
| character_set_filesystem | binary                     |
| character_set_results    | utf8mb4                    |
| character_set_server     | utf8mb4                    |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

+----------------------+--------------------+
| Variable_name        | Value              |
+----------------------+--------------------+
| collation_connection | utf8mb4_general_ci |
| collation_database   | utf8mb4_unicode_ci |
| collation_server     | utf8mb4_unicode_ci |
+----------------------+--------------------+
3 rows in set (0.00 sec)

character_set_system her zaman utf8'dir .

Bu mevcut tabloları etkilemez, sadece varsayılan ayardır (yeni tablolar için kullanılır). Aşağıdaki ALTER kodu var olan bir tabloyu dönüştürmek için kullanılabilir (döküm geri yükleme geçici çözümü olmadan):

ALTER DATABASE databasename CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Düzenle:

MySQL 5.0 sunucusunda: character_set_client, character_set_connection, character_set_results, collation_connection latin1'de kalır. Düzenleyen SET NAMES utf8(bu sürümde mevcut değildir utf8mb4) utf8 olanlar yanı ayarlar.


Uyarı : VARCHAR (255) türünde bir dizin sütunu olan bir utf8 tablonuz varsa, bazı durumlarda dönüştürülemez, çünkü maksimum anahtar uzunluğu aşılmıştır ( Specified key was too long; max key length is 767 bytes.). Mümkünse, sütun boyutunu 255'ten 191'e düşürün (çünkü 191 * 4 = 764 <767 <192 * 4 = 768). Bundan sonra, tablo dönüştürülebilir.


Ayarlarınızı takip ettim, ama character_set_databasehala utf8ve collation_databaseutf8_bin` olduğunu görüyorum. Bir şey mi kaçırdım?
Stewart

Kaçırdığım şeyi buldum. Bu 2 ayar, veritabanının kendisi oluşturulduğunda ayarlanır. Bu soruya bakın; stackoverflow.com/questions/22572558/…
Stewart

1
character-set-client-handshake = FALSE[mysqld] bölümüne ekleyin , bu yüzden uygulama katmanında hata
yapsanız

merhaba ben bu çözümü denedim ama yine de character_set_client gösteremiyorum | utf8mb4. utf8. sadece character_set_database utf8mb4 ve character_set_server utf8mb4 utf8mb4 diğer değiştirilmez. Lütfen bana yardım et
Bhavin Chauhan

@ baic6 Soruna neden yalnızca dizine alınmış sütunların neden olabileceğini açıklayan bir not eklemenizi öneririm. 767 bayt sınırlaması yalnızca dizinlenmiş sütunlar içindir, çünkü "anahtar" lar için sınırlama. Genel olarak dizine eklenmemiş sütunlar için bu geçerli değildir. Bir sütunun maksimum bayt uzunluğu olan bir değeri varsa, örneğin 255 karakter ve maksimum 3 bayt utf8 kullanıldıysa, yine de yalnızca 255 * 3 bayt gerekir, bu durumlarda utf8mb4 sadece 3 bayt kullanır, çünkü utf8mb4'teki bu karakterler de sadece 3 bayt gerekir. Diğer bir deyişle, utf8'e sığmayan bir karakter sütuna kaydedilmezse, bu durumda bilgi zaten kaybolur.
sam

55

MySQL 5.5'te my.cnf dosyamda var

[mysqld] 
init_connect='SET collation_connection = utf8_unicode_ci' 
init_connect='SET NAMES utf8' 
character-set-server=utf8 
collation-server=utf8_unicode_ci 
skip-character-set-client-handshake

Sonuç:

mysql> show variables like "%character%";show variables like "%collation%";

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_unicode_ci |
| collation_database   | utf8_unicode_ci |
| collation_server     | utf8_unicode_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)

2
skip-character-set-client-handshakeTam olarak ne yapar ve hangi koşullar altında gereklidir?
Simon East

3
@Simon, kullanırken show variables like "%collation%";'collation_connection' utf8_general_cive collation_database ve collation_server olarak görüyordum utf8_unicode_ci. Satırı eklemek skip-character-set-client-handshakegenel girişi unicode olarak değiştirdi, bu yüzden üçü de tutarlıydı.
Vaughany

2
MySQL 5.6'da, atlama karakter kümesi-istemci-el sıkışma @Vaughany'nin söylediklerini yapmaz. Herhangi bir öneri?
Ababneh A

4
skip-character-set-client-handshakeBenim için (- Debian 7 elbette "karakter kümesi sunucu" ve "harmanlama-server" birlikte) yaptım. init_connectLer olan veya olmayan bir fark yoktu skipve lüzumsuz görünüyor. +1 ve teşekkür ederim.
Jeff

3
skip-character-set-client-handshake , istemci tarafından gönderilen karakter kümesi bilgilerini yoksayar. İletişim sırasında belirli bir karakter setini zorlamak güzel, ancak istemci başka bir şey bekliyorsanız sorunlara yol açabilir. Bunu istemcinizde (uygulamanız) belirtmekten daha iyi olduğunuzu söyleyebilirim.
0b10011

31

Not: my.cnf dosyası şurada bulunur:/etc/mysql/

Bu satırları ekledikten sonra:

[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
skip-character-set-client-handshake

[client]
default-character-set   = utf8

[mysql]
default-character-set   = utf8

Sunucuyu yeniden başlatmayı unutmayın:

sudo service mysql restart

2
Not: Bu varsayılan olarak değişir; o mu değil varolan herhangi sütunlar kodlamasını değiştirmek.
Rick James

24

NijaCat yakındı, ancak aşırılık belirtildi:

Varsayılanı UTF-8 olarak ayarlamak için, my.cnf dosyasına aşağıdakileri eklemek istersiniz

[client]
default-character-set=utf8

[mysqld]
default-character-set = utf8

Ardından, doğrulamak için:

mysql> show variables like "%character%";show variables like "%collation%";

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)

5
Güzel cevap. Belki de hangi parçaların aşırı dolu olduğu hakkında kısa bir açıklama, insanların yapılandırmalarında tam olarak ne istediklerine karar vermelerine yardımcı olabilir.
Mike Samuel

@Derek, O zaman ne yapar [mysql] default-character-set=utf8?
Pacerier

1
[Client] seçenek grubu, my.cnf dosyasını okuyan tüm MySQL istemcileri için seçenekleri zaten ayarlar. [Mysql] grubu özellikle "mysql" istemci ikili dosyası için seçenekleri belirler. Diğer istemciler için geçerli olmayan bir mysql seçeneği ayarlamak istiyorsanız, bu grubu kullanmak uygundur, ancak her iki konumda da aynı seçenek değerinin ayarlanması gereksizdir. dev.mysql.com/doc/refman/5.6/tr/option-files.html
Derek

@Mike Samuel, varsayılan karakter setinin utf8 olarak ayarlanması zaten utf8_general_ci varsayılan harmanlama modunu ima eder. Öte yandan, "init-connect = 'SET NAMES utf8'", sunucuya bağlanan tüm istemcileri utf8 kullanmaya zorlamaya çalıştığı için biraz ilginç bir fikirdir, ancak bu, bağlantının bağlantı ayrıcalıklarına bağlı olarak tutarsız bir şekilde uygulanır. kullanıcı ve ben, sunucu istedikleri karakter grubunu geçersiz kıldığında bazı üçüncü taraf istemcilerin kafasının karıştığından şüpheleniyoruz. dev.mysql.com/doc/refman/5.6/tr/charset-applications.html
Derek

İçin [mysqld]kullanım character-set-serveryerinedefault-character-set
Rick James

23

Ben de ayarladıktan sonra öğrendim default-character-set = utf8altında [mysqld]başlık, MySQL 5.5.x altında cekti'başlamak Ubuntu 12.04 (Hassas Pangolin).


16
Bu MySQL hatası # 52047 . Altında [mysqld], character-set-serveryerine kullanmalısınız default-character-set. (Son derece kafa karıştırıcı, katılıyorum!)
Mathias Bynens

Evet. 5.0'da kullanımdan kaldırıldı; 5.5'te kaldırıldı.
Rick James

22

MySQL v5.5.3 ve üstü:

Yalnızca [mysqld] bölümüne üç satır ekleyin:

[mysqld]
character-set-server = utf8
collation-server = utf8_unicode_ci
skip-character-set-client-handshake

Not: dahil skip-character-set-client-handshakeburada her ikisini de gereğini ortadan kaldırır init-connectiçinde [mysqld]ve default-character-setiçinde [client]ve [mysql]bölümler.


1
Vay be, bu soruya çok fazla yinelenen cevap var, ama yine de bu en basit soru gibi görünüyor. Ayrıca v5.5.44 üzerinde benim için çalışıyor.
Justin Watt

9

Xubuntu 12.04 altında basitçe ekledim

[mysqld]
character_set_server = utf8

/etc/mysql/my.cnf adresine

Ve sonuç

mysql> show variables like "%character%";show variables like "%collation%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)

Ayrıca http://dev.mysql.com/doc/refman/5.6/en/charset-server.html adresine de göz atın.


Ayrıca [client] default-character-set = utf8'e ihtiyacınız vardır, aksi takdirde komut satırında mysql kullandığınızda, dosyaya yönelttiğiniz yedekleri yok etmek için utf8 kullanılmaz.
malhal

9

Burada listelenen tüm ayarlar doğrudur, ancak burada en uygun ve yeterli çözüm bulunmaktadır:

[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
character-set-server = utf8
collation-server = utf8_unicode_ci

[client]
default-character-set = utf8

Bunları şuraya ekle /etc/mysql/my.cnf.

Performans sorunu nedeniyle utf8_unicode_ci tür harmanlamayı seçtiğimi lütfen unutmayın .

Sonuç:

mysql> SHOW VARIABLES LIKE 'character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_unicode_ci |
| collation_database   | utf8_unicode_ci |
| collation_server     | utf8_unicode_ci |
+----------------------+-----------------+

Ve bu SUPER olmayan bir kullanıcı olarak bağlandığınızda !

Örneğin, SUPER ve SUPER olmayan kullanıcı arasındaki bağlantı arasındaki fark (elbette utf8_unicode_ci harmanlama durumunda ):

SUPER priv kullanıcısı :

mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci | <---
| collation_database   | utf8_unicode_ci |
| collation_server     | utf8_unicode_ci |
+----------------------+-----------------+

SUPER olmayan özelliğe sahip kullanıcı :

mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_unicode_ci |
| collation_database   | utf8_unicode_ci |
| collation_server     | utf8_unicode_ci |
+----------------------+-----------------+

Neden bir veya diğer seçeneği kullanmanız gerektiğini ayrıntılı olarak açıklayan kapsamlı bir makale (rus) yazdım . Tüm Karakter Kümeleri ve Harmanlama türleri dikkate alınır: sunucu için, veritabanı için, bağlantı için, tablo için ve hatta sütun için.

Umarım bu ve makale belirsiz anları netleştirmeye yardımcı olur.


3
Bağlantılı makalenizi okuyabilseydim, ancak Rusça okuyamıyorum ve Google çevirisi teknik metinler için yararlı değildir. Söyleyebileceğim kadarıyla çok ilginç olurdu. Lütfen İngilizce bir versiyon yayınlamayı düşünür müsünüz?
Martijn Heemels

2
SUPER kullanıcı bağlantısı harmanlamasını ayarlamak için hangi ayarın başarısız olduğunu açıklayabilir misiniz? (ve bir çözüm var)
KCD

@gahcep, utf8_unicode_ciPerformans sorunları nedeniyle kullandığınızı söylediniz , neden utf8_binbunun yerine kullanmıyorsunuz ?
Pacerier

Merhaba Paceriar. İyi bir nokta. Şimdi seçimimin kullanımı konusunda doğru olup olmadığından emin değilim utf8_unicode_ci. Performansı test etmek için hiç zaman harcamadım.
gahcep


4

MySQL sürümleri ve Linux dağıtımları yapılandırma yaparken önemli olabilir.

Ancak, [mysqld]bölüm altındaki değişiklikler teşvik edilmektedir.

Tomazzlender'ın cevabına kısa bir açıklama yapmak istiyorum:

[mysqld] 
init_connect='SET collation_connection = utf8_unicode_ci' 
init_connect='SET NAMES utf8' 
character-set-server=utf8 
collation-server=utf8_unicode_ci 
skip-character-set-client-handshake

[Mysqld]

Bu, collation_connection öğesini utf8_unicode_ci olarak değiştirir

init_connect='SET collation_connection = utf8_unicode_ci'

Kullanma SET NAMES:

init_connect='SET NAMES utf8'

SET NAMES üç karakteri etkileyecektir, yani:

character_set_client
character_set_results
character_set_connection

Bu ayarlanacak character_set_database & character_set_server

character-set-server=utf8

Bu yalnızca collation_database ve collation_server öğelerini etkiler

collation-server=utf8_unicode_ci

Üzgünüm, bunun ne için olduğundan emin değilim. Ancak kullanmıyorum:

skip-character-set-client-handshake

Dokümantasyon notları character_set_serverelle ayarlamak gerekir.
Brian

Peki son teknoloji yaklaşımı nedir? character setVeritabanı bağlantısı kurulurken açıkça geçebiliriz , ancak biraz can sıkıcı görünüyor.
Lihang Li

Aslında bir hata yaptım. Belgeler, character_set_database'in dinamik olarak ayarlanmaması gerektiğini söylüyor. Character_set_server'dan bahsetmez. Ancak, sadece yeni oluşturulan bir veritabanı için varsayılan değeri etkilediğini düşünüyorum çünkü character_set_server hakkında endişelenmenize gerek yok emin değilim?
Brian

Yukarıda belirtildiği ve ben, sadece şimdi tekrar denemeyi yaptığı gibi character_set_serveriçinde [mysqld]bölüm etkileyecektir character_set_databaseve character_set_server. Şimdi iyi bir uygulama açıkça character setbir veritabanı, bir tablo ve veritabanı bağlantısı oluştururken kullanmak istediğiniz işaret etmek olduğunu düşünüyorum. Dürüst olmak gerekirse, dokümantasyonu mysqlo kadar kolay anlaşılamıyor. Eğer tüm almak için genel bir yol olup olmadığını biliyor musunuz character setve collationmysql yapılan ayarları?
Lihang Li

4

Fedora 21'de

$ vi /etc/my.cnf

Takip et:

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci 
skip-character-set-client-handshake

Kaydet ve çık.

Son hatırlama hizmet mysqld ile yeniden başlatın service mysqld restart.


1

MySQL 5.5, tek ihtiyacınız olan:

[mysqld]
character_set_client=utf8
character_set_server=utf8
collation_server=utf8_unicode_ci

collation_server İsteğe bağlı.

mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

1

MySQL Workbench kullanarak istemcinin karakter seti desteğini onaylamakta sorun yaşıyorsanız, aşağıdaki notu aklınızda bulundurun:

Önemli MySQL Workbench tarafından açılan tüm bağlantılar otomatik olarak istemci karakter setini utf8 olarak ayarlar. SET NAMES ... gibi istemci karakter kümesini el ile değiştirmek MySQL Workbench'in karakterleri doğru bir şekilde göstermemesine neden olabilir. İstemci karakter kümeleri hakkında ek bilgi için, bkz. Bağlantı Karakter Kümeleri ve Harmanlamaları.

Bu nedenle, MySQL Workbench'in karakter kümelerini my.cnf değişiklikleriyle geçersiz kılamadım. örneğin 'set names utf8mb4'


1

Mysql hizmetini yeniden başlattıktan sonra istemci ve conn ayarınızla karıştırılırsanız sıfırlanır. Benim için çalışan şu adımları deneyin:

  1. vi /etc/my.cnf
  2. içeriği darbe eklemek ve :wq [client] character-sets-dir=/usr/local/mysql/share/mysql/charsets
  3. mysql'yi yeniden başlatın ve mysql'e giriş yapın, veritabanını kullanın, giriş komutu status;, 'istemci' için karakter setini bulacaksınız ve 'conn' 'utf8' olarak ayarlanmıştır.

Daha fazla bilgi için referansa bakın.


0

Bunu olduğu gibi yapabilirsiniz ve işe yaramazsa mysql'yi yeniden başlatmanız gerekir.


-1

MySQL karakterini değiştirme:

müşteri

default-character-set=utf8

mysqld

character_set_server=utf8

Biz yazmak gerekir default-character-set=utf8dair bir hata gibi neden olabileceği için, mysqld içinde:

start: İş başlatılamadı

Sonunda:

 +--------------------------+----------------------------+
 | Variable_name            | Value                      |
 +--------------------------+----------------------------+
 | character_set_client     | utf8                       |
 | character_set_connection | utf8                       |
 | character_set_database   | utf8                       |
 | character_set_filesystem | binary                     |
 | character_set_results    | utf8                       |
 | character_set_server     | utf8                       |
 | character_set_system     | utf8                       |
 | character_sets_dir       | /usr/share/mysql/charsets/ |
 +--------------------------+----------------------------+
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.