Simply.com is available in english

Charset ve collation bir MySQL veritabanında

Utf8mb4 karakter seti ve utf8mb4_unicode_ci sıralamasını MySQL’de kullanın ve phpMyAdmin veya ALTER komutlarıyla değiştirin, bağlantı için SET NAMES’i de unutmayın.

Charset (karakter kümesi) belirler veritabanının hangi karakterleri saklayabileceğini ve collation karakterlerin nasıl karşılaştırıldığını ve sıralandığını belirler. Yanlış charset, Danimarka harflerinin (æ, ø, å) veya emojilerin soru işareti ya da mojibake olarak görünmesinin en yaygın sebebidir (örn. æ yerine æ).

Önerilen değerler

utf8mb4 charset olarak ve utf8mb4_unicode_ci collation olarak kullanın. utf8mb4 tüm Unicode karakterlerini, emoji dahil, destekler.

Metode 1: phpMyAdmin

Tüm veritabanı için varsayılanı değiştirin (sadece yeni tablolar için geçerlidir):

  1. phpMyAdmin'e giriş yapın ve sol taraftan veritabanını seçin.
  2. Operationer sekmesine tıklayın.
  3. Sortering (Collation) bölümünü bulun.
  4. Açılır menüden utf8mb4_unicode_ci seçin.
  5. Udfør.

Mevcut bir tabloyu değiştirin (tüm sütunları dahil):

  1. Sol taraftan tabloyu seçin.
  2. Operationer sekmesine tıklayın.
  3. Tabelvalgmuligheder altında yeni collation seçilir.
  4. Skift også sortering for alle kolonner seçeneğini işaretleyin.
  5. Udfør.

Metode 2: SQL

Veritabanının varsayılanını değiştirin:

ALTER DATABASE mindatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Bir tabloyu ve tüm sütunlarını değiştirin:

ALTER TABLE mintabel CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

phpMyAdmin'de charset'i sütun bazında değiştirebilirsiniz: tabloyu seçin, Struktur sekmesine tıklayın, sütunun yanındaki Skift butonuna tıklayın ve sütun tanımında yeni collation'ı seçin.

Konverter alle tabeller på én gang

ALTER komutlarını otomatik olarak oluşturun:

SELECT CONCAT('ALTER TABLE `', TABLE_NAME, '` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;')
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'mindatabase' AND TABLE_TYPE = 'BASE TABLE';

SQL sekmesinde phpMyAdmin üzerinden ya da komut satırından sonucu çalıştırın.

Forbindelsens charset (SET NAMES)

Veritabanı charset'i ile bağlantı charset'i iki farklı şeydir. Tablolarınız utf8mb4 olarak doğru ayarlanmış olsa bile, uygulama ile MySQL arasındaki bağlantı başka bir charset kullanıyorsa, karakterler geçişte bozulabilir.

SET NAMES utf8mb4 üç oturum değişkenini bir kerede ayarlar:

  • character_set_client — sunucunun istemciden alması beklenen karakter kümesi
  • character_set_connection — sunucunun sorgu işleme sırasında dahili olarak kullandığı karakter kümesi
  • character_set_results — sunucunun istemciye geri gönderdiği karakter kümesi
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;

Daha iyi bir uygulama: SET NAMESi manuel göndermek yerine sürücünün yerleşik charset seçeneğini kullanın. Bu, mysqli_real_escape_string() ve PDO::quote() gibi fonksiyonların da doğru charset'i kullanmasını sağlar — aksi takdirde nadir durumlarda SQL enjeksiyonuna açık hale gelebilirsiniz.

Destek kategorisinden makale: MySQL

Diğer ilgili makaleler