Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 27972|Yanıt: 0

[Kaynak] MySQL'de utf8 ile utf8mb4 arasındaki fark

[Bağlantıyı kopyala]
2021-4-21 tarihinde 18:01:22 tarihinde yayınlandı | | | |
Bilinmeyen karakter seti: utf8mb4
https://www.itsvse.com/thread-3199-1-1.html
1. Giriş

MySQL, bu utf8mb4 kodlamasını 5.5.3'ten sonra ekledi, yani çoğu bayt 4 ve özellikle dört baytlık unicode ile uyumlu olmak için kullanılmıştır. Neyse ki, utf8mb4, utf8'in bir üst kümesidir ve başka bir dönüştürme gerekmez, sadece kodlamayı utf8mb4'e değiştirmek gerekir. Tabii ki, alan tasarrufu için genellikle utf8 kullanmak yeterlidir.

2. İçerik tanımı

Yukarıda belirtildiği gibi, utf8 çoğu Çin karakterini kaydedebiliyorsa, neden utf8mb4 kullanıyorsunuz? MySQL tarafından desteklenen UTF8 kodlamasının maksimum karakter uzunluğu 3 bayttır ve 4 baytlık geniş bir karakterle karşılaşırsanız, bir istisna eklersiniz. UTF-8 tarafından kodlanan maksimum üç baytlık Unicode karakteri 0xffff'dir; bu, Unicode'daki temel çok dilli düzlemdir (BMP). Yani, temel çoklu metin düzleminde olmayan herhangi bir Unicode karakteri Mysql'in utf8 karakter seti kullanılarak depolanamaz. Bunlar arasında emojiler (Emoji, iOS ve Android telefonlarda yaygın olarak bulunan özel bir Unicode kodlamasıdır), nadir kullanılan birçok Çin karakteri, yeni Unicode karakterleri ve daha fazlası bulunur.

3. Sorunun temel nedeni

Orijinal UTF-8 formatı bir ila altı bayt kullanıyordu ve 31 karaktere kadar kodlayabiliyordu. En son UTF-8 spesifikasyonu sadece bir ila dört bayt kullanır ve 21 bite kadar kodlayabilir; bu da tam olarak tüm 17 Unicode düzlemini temsil eder. utf8, Mysql'de yalnızca üç bayta kadar uzun UTF-8 karakterlerini destekleyen bir karakter kümesidir ve bu, Unicode'un temel çoklu metin düzlemidir.

Mysql'deki UTF8 neden sadece maksimum üç bayt olan UTF-8 karakterlerini destekliyor? Bunu düşündüm, belki de Mysql ilk geliştirildiğinde Unicode'un yardımcı bir düzlemi olmadığı için. O dönemde Unicode Komitesi hâlâ "65.535 karakter tüm dünya için yeterli" hayalini kuruyordu. Mysql'deki dizi uzunlukları bayt yerine karakter sayar ve CHAR veri tipleri için dizileri yeterince uzun yapmak gerekir. utf8 karakter seti kullanılırken, korunması gereken uzunluk, utf8'in en uzun karakter uzunluğunun dize uzunluğuyla çarpılmasıdır, bu yüzden maksimum utf8 uzunluğunu 3 ile sınırlamak doğaldır; örneğin CHAR(100) Mysql 300 bayt tutar. Sonraki sürümlerin neden 4 baytlık UTF-8 karakterleri desteklemediğine gelince, bence biri geriye doğru uyumluluk nedenleriyle, diğeri ise temel çok dilli düzlem dışındaki karakterlerin nadiren kullanılması.

Mysql'de 4 baytlık UTF-8 karakterleri kaydetmek için utf8mb4 karakter seti gereklidir, ancak bu sadece 5.5.3 sürümünden sonra desteklenmektedir (bkz. sürüm: select version(); )。 Daha iyi uyumluluk için her zaman utf8mb4 kullanmalısın, utf8 yerine bence.  CHAR tipi veriler için utf8mb4 daha fazla alan kaplar ve resmi Mysql önerisine göre CHAR yerine VARCHAR kullanılır.







Önceki:ORM çerçevesi SqlSugar'ın basit kullanımı
Önümüzdeki:HTTP isteği başlığı Expect ayrıntılı olarak açıklanmıştır
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com