Character_set_client değerini utf8mb4 olarak ayarla


12

Bu kılavuzuutf8mb4 izleyerek DB'mi dönüştürmeye çalışıyorum . Ben ayarladım:

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]
init-connect='SET NAMES utf8mb4'
collation_server=utf8mb4_unicode_ci
character_set_server=utf8mb4
skip-character-set-client-handshake

Ancak değeri utf8mb4 olarak değişir character_set_clientve character_set_resultsyine de değişmez.

mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
+--------------------------+--------------------+
| Variable_name            | Value              |
+--------------------------+--------------------+
| character_set_client     | utf8               |
| character_set_connection | utf8mb4            |
| character_set_database   | utf8mb4            |
| character_set_filesystem | binary             |
| character_set_results    | utf8               |
| character_set_server     | utf8mb4            |
| character_set_system     | utf8               |
| collation_connection     | utf8mb4_unicode_ci |
| collation_database       | utf8mb4_unicode_ci |
| collation_server         | utf8mb4_unicode_ci |
+--------------------------+--------------------+

Neyi yanlış yapıyorum? Bu değerleri utf8mb4 olarak nasıl ayarlayabilirim?

Yanıtlar:


14

Açıklama: Takip ettiğiniz kılavuz olan MySQL veritabanlarında tam Unicode'u nasıl destekleyeceğimin yazarıyım .

  1. Değiştirilen ayarları nereye kaydettiniz? mysqldVarsayılan seçeneklerin nereden yüklendiğini kontrol edin . Genellikle /etc/my.cnf( kılavuzda belirtildiği gibi ) ancak sisteminizde farklı olabilir. Öğrenmek için aşağıdaki komutu çalıştırın:

    $ mysqld --help --verbose 2> /dev/null | grep -A1 'Default options'
    Default options are read from the following files in the given order:
    /etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf
  2. Değişiklikleri yaptıktan sonra mysqldçalıştırarak yeniden mysqld restartbaşlattınız mı?


1. Değişiklikleri kaydettim \xampp\mysql\bin\my.ini. Çalıştırmayı başaramadım mysqld --help --verbose 2> /dev/null | grep -A1 'Default options'- şu hatayı verdiği için: 'grep' is not recognized as an internal or external command, operable program or batch file.Bu şeyler için yeniyim, bu yüzden yanlış bir şey yapıyor olabilirim.
qwaz

2. mysqld'i yeniden başlattım ve bana şu uyarıları verdikten sonra: 2014-02-19 10:25:17 0 [Uyarı] Karakter kümesi kümesi-istemci-el sıkışma yerine benzersiz bir seçenek öneki kullanmak karakter_set_client kullanımdan kaldırıldı ve kaldırılacak gelecekteki bir sürümde. Lütfen bunun yerine tam adı kullanın. 2014-02-19 10:25:17 0 [Uyarı] mysqld: geçersiz 'utf8mb4' değeri nedeniyle '--character-set-client-handshake' seçeneği yok sayılıyor
qwaz

1
skip-character-set-client-handshakeYapılandırma dosyanızda neden var ? Bu bir komut satırı seçeneğidir, değişken değildir.
Mathias Bynens

1
Yerel sunucuyu yeniden kurmak zorunda kaldım; tekrar rehberiniz üzerinden yürüdü ve her şey amele. Yanıtınız ve yardımınız için teşekkür ederim. Cevabınıza geri döneceğim ve bunu yapmak için yeterli temsilcim olur olmaz onu oylayacağım.
qwaz

3
Bu çalıştı ama yine character_set_client, character_set_connection, character_set_results, collation_connectionolarak gösterilir utf8. Bunun neden çalışmadığına dair bir fikrin var mı?
Sarita

2

Bu kılavuzu da takip ettim, ancak aynı sorun tekrar ortaya çıktı. Asıl sorun, DB'yi DEFAULT CHARACTERargüman olarak aldığı gibi oluşturmak için kullanılan komutta yatar ve yürütme sırasında geçilmezse, varsayılan bir karakter seti geçirilir utfmb4.

Düzeltmek için izlediğim adımlar aşağıdadır:

  1. utf8mb4Karakter kümesiyle kukla bir veritabanı oluşturun .

    create database `your_db_name_dummy`
      DEFAULT CHARACTER SET utf8mb4
      DEFAULT COLLATE utf8mb4_unicode_ci;
  2. Gerçek yapıyı ve verileri gerçek veritabanından bu kukla veritabanına kopyalayın

    mysqldump -uroot -proot_password your_db_name | mysql -uroot -proot_password your_db_name_dummy

  3. Geçerli veritabanını bırak

    SET FOREIGN_KEY_CHECKS=0;
    DROP DATABASE your_db_name;
  4. Yeni veritabanı oluştur

    create database `your_db_name`
      DEFAULT CHARACTER SET utf8mb4
      DEFAULT COLLATE utf8mb4_unicode_ci;
  5. Son olarak, tablo yapısını ve verilerini orijinal veritabanına geri koyun

    mysqldump -uroot -proot_password your_db_name_dummy | mysql -uroot -proot_password your_db_name

Yukarıda belirtilen prosedürü kullanacaksanız, lütfen aşağıda belirtilen satırları da dikkatle okuyun.

Önkoşullar ve statükom:

  • Tüm yapınızı, verilerinizi, saklı yordamlarınızı, işlevlerinizi, tetikleyicilerinizi vb. Yedekleyin.
  • mysql --version mysql Ver 14.14 EditLine sarmalayıcı kullanarak Linux (x86_64) için 5.7.22 dağıtın

  • cat /etc/my.cnf

    [client]
    default-character-set = utf8mb4
    
    [mysql]
    default-character-set = utf8mb4
    
    [mysqld]
    character-set-client-handshake = FALSE
    character-set-server = utf8mb4
    init-connect = 'SET NAMES utf8mb4
    collation-server = utf8mb4_unicode_ci
  • Java istemcisi kullanıyorum 'mysql:mysql-connector-java:5.1.30'

  • Bağlantı dizem jdbc:mysql://ip.of.database:3306/your_db_name?zeroDateTimeBehavior=convertToNull&noAccessToProcedureBodies=true&autoReconnect=true
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.