Bir tablonun varsayılan harmanlamasını nasıl değiştirebilirim?


187
create table check2(f1 varchar(20),f2 varchar(20));

varsayılan harmanlama içeren bir tablo oluşturur latin1_general_ci;

alter table check2 collate latin1_general_cs;
show full columns from check2;

sütunların ayrı ayrı harmanlanmasını 'latin1_general_ci' olarak gösterir.

O zaman tablo değiştirme komutunun etkisi nedir?



Kendim ve birçoğu, 2. cevabın doğru olduğunu kabul ettiği için doğru cevabı değiştirmek isteyebilirsiniz.
Ahi Tuna

Yanıtlar:


597

Var olan sütunlarınkiler dahil bir tablonun varsayılan karakter kümesini ve harmanlamasını değiştirmek için (cümle'ye dönüştürmeye dikkat edin ):

alter table <some_table> convert to character set utf8mb4 collate utf8mb4_unicode_ci;

Bazı yorumların istenmesi sayesinde cevabı düzenledi:

Utf8 önerilmemelidir. Neredeyse asla istediğiniz şey değildir ve genellikle beklenmedik karışıklıklara yol açar. Utf8 karakter kümesi UTF-8 ile tam uyumlu değildir. UTF-8 istiyorsanız utf8mb4 karakter kümesi istediğiniz şeydir. - 28 Mart 18:18

ve

Bu oldukça önemli görünüyor, yorumları okuduğuma sevindim ve teşekkürler @RichRemer. Nikki, sanırım cevabında bunun kaç kez göründüğünü düşünerek düzenlemelisin. Buraya bakın https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8.html ve burada MySQL'de utf8mb4 ve utf8 karakter kümeleri arasındaki fark nedir? - Paulpro 12 Mar 17:46


4
Varsayılan karakter setini değiştirmenin sonuçları nelerdir? Mevcut verileri güncelliyor mu ve bu nedenle tablodan geçip güncelleme yapması, kilitlemesi vs. gerekiyor mu?
hibe

utf8_bindaha iyi, değil mi? Arasındaki fark nedir utf8_binve utf8_unicode_ci?
Jasom Dotnet

1
Bu sadece kullandığım bir örnek. Aradaki fark büyük / utf8_binküçük harfe duyarlı ve utf8_unicode_cibüyük / küçük harfe duyarlı değildir. Biri diğerinden daha iyi değildir - ihtiyaçlarınıza uygun olanı kullanın.
Nikki Erwin Ramirez

12
@JasomDotnet şimdi utf8mb4_unicode_ci stackoverflow.com/questions/766809/…
baptx

2
Tavsiye etmekten kaçının utf8. Neredeyse asla istediğiniz şey değildir ve genellikle beklenmedik karışıklıklara yol açar. utf8Karakter kümesi UTF-8 ile tam uyumlu değildir. utf8mb4Karakter kümesi UTF-8 istiyorsanız istediğiniz şeydir.
Zengin Remer

34

MySQL 4 derleme düzeyine sahiptir: sunucu, veritabanı, tablo, sütun. Sunucunun, veritabanının veya tablonun harmanlamasını değiştirirseniz, her sütun için ayarı değiştirmezsiniz, ancak varsayılan harmanlamaları değiştirirsiniz.

Örneğin, bir veritabanının varsayılan harmanlamasını değiştirirseniz, bu veritabanında oluşturduğunuz her yeni tablo bu harmanlamayı kullanır ve bir tablonun varsayılan harmanlamasını değiştirirseniz, bu tabloda oluşturduğunuz her sütun bu harmanlamayı alır.


8
Aslında, MySQL'in BEŞ harmanlama Seviyesi vardır, birçok kişinin unutduğu bir karakter seti seviyesi varsayılan harmanlama ayarı vardır.
Devy

6
Bağlantı harmanlaması da var show variables like "collation%";, bu yüzden toplam SIX .
Dzmitry Lazerka

9

Tablo için varsayılan harmanlamayı ayarlar; yeni bir sütun oluşturursanız, bu latin_general_ci ile harmanlanmalıdır - Bence. Tek tek sütun için harmanlamayı belirtmeyi deneyin ve bunun işe yarayıp yaramadığına bakın. MySQL, bunu ele alma biçimiyle ilgili gerçekten tuhaf bir davranışa sahiptir.


3

sadece tabloyu değil SCHEMA'yı da değiştirmeniz gerekebilir

ALTER SCHEMA `<database name>`  DEFAULT CHARACTER SET utf8mb4  DEFAULT COLLATE utf8mb4_unicode_ci (as Rich said - utf8mb4);

(mariaDB 10)


<database name>yerine<table name>
dnivog

1
Neden tavsiye etmemeniz gerektiğini kabul edilen cevap hakkındaki yorumuma bakın utf8, ancak utf8mb4.
Zengin Remer
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.