MYSQL veritabanında utf8 kullanmayın utf8mb4 kullanın
MySQL, veritabanı iki çeşit utf-8 karakterini destekler. utf8 sadece ÇJVK (Çince, Japonca, Vietnam, Korece) kapsayacak ve karakter başına 1 ila 3 bayt kullanacak 65.536 kod noktasını saklayabilir. MySQL 5.5.3 sonra utf8mb4
karekter kodlama ekledi, utf8mb4
(standart UTF-8'in yanı sıra) Unicode tarafından belirtilen herhangi bir karakteri doğrudan depolayabilir; utf32, 4 bayt(32bit) olarak sabit boyutta iken, utf8bm4
karakter kodlaması karakter başına karekterin türüne göre 1 ve 4 bayt yer ayırabilir.
Utf8mb3
'ün takma adı utf-8
'dir. Utf-8 kodlaması 2 bayt, 3 bayt, 4 bayt karakter olabilir, Ancak MySQL'in utf8
kodlaması sadece 3 bayt veriyi destekler, mobil cihazlarda emoji karekterler verileri ise 4 bayt karakterdedir. Emoji karekter verilerini doğrudan utf-8
kodlaması kullanan bir veritabanına eklerseniz , php gibi programlama dili bir hata bildirilir:
MySQL 5.5.3'ten sonra utf8mb4
karakter kodlamasını ekledi, mb4 en çok 4 bayt veriyi saklar. Basitçe utf8mb4
, utf8'in bir üst kümesidir ve utf8
ile tamamen uyumludur.
Unicode'un 11 sürümüne göre 137000 karakteri var. ("A" ve "🦆", bu tür iki karakterdir.) En basit kodlama, UTF-32'de, her karakterin 4 byte (32bit) almasını sağlar. Halbuki normal harf karekterleri 1byte(8bit) bunlarada 4byte(32bit) hafıza ayırdığı için çok yer kapladığı ve sistemi yavaşlattığı için kullanılması tercih edilmez.
UTF-8
'de, "A" gibi ortak karakterler 8 bit alan kaplarken, "🦆" gibi nadir karakterler 32 bit alan kaplar. Diğer karakterler 16 veya 24 bit kaplayabilir. Bunun gibi bir blog yazısı, UTF-8'de, UTF-32'de olduğundan dört kat daha az yer kaplar. Yani dört kat daha hızlı yüklenir.
MYSQL veritabanında unicode karekterler nasıl görünüyor.
MYSQL Unicode desteği
Unicode Standard, Temel Çok Dilli Düzlemdeki (BMP) karakterleri ve BMP'nin dışında bulunan ek karakterleri içerir. Bu bölümde MySQL'deki Unicode desteği açıklanmaktadır.
BMP karakterleri şu özelliklere sahiptir:
- Kod noktası değerleri 0 ile 65535 arasındadır ( U+0000ve U+FFFF).
- 8, 16 veya 24 bit (1 ila 3 bayt) kullanarak değişken uzunlukta bir kodlamada kodlanabilirler.
- 16 bit (2 bayt) kullanarak sabit uzunlukta bir kodlamada kodlanabilirler.
- Ana dillerdeki hemen hemen tüm karakterler için yeterlidir.
Tamamlayıcı karakterler BMP'nin dışında yer alır:
- Onların kod noktası değerleri U+10000 ve U+10FFFF arasındadır.
- Ek karakterler için Unicode desteği, BMP karakterlerinin dışında bir aralık içeren karakter kümeleri gerektirir ve bu nedenle BMP karakterlerinden daha fazla yer alır (karakter başına 4 bayta kadar).
Unicode verilerini kodlamak için UTF-8
(Unicode Transformation Format) yöntemi, bir ila dört baytlık kodlama dizilerini açıklayan RFC 3629'a göre uygulanır. UTF-8
fikri, çeşitli Unicode karakterlerinin farklı uzunluklardaki bayt dizileri kullanılarak kodlanmasıdır:
- Temel Latin harfleri, rakamları ve noktalama işaretlerini bir bayt kullanır.
- Çoğu Avrupa ve Ortadoğu yazı harfleri 2 baytlık bir diziye sığdırılır: genişletilmiş Latin harfleri(with tilde, macron, acute, aksanlarla), Kiril, Yunanca, Ermeni, İbranice, Arapça, Süryani ve diğerleri.
- Korece, Çince ve Japonca ideograflar 3 bayt veya 4 bayt dizileri kullanır.
MySQL bu Unicode karakter kümelerini destekler:
- utf8mb4: Unicode karakter kümesinin karakter başına bir ile dört bayt arasında bir UTF-8 kodlaması.
- utf8mb3: Unicode karakter kümesinin karakter başına bir ile üç bayt arasında bir UTF-8 kodlaması.
- utf8: Asıl adı utf8mb3'dir.
- ucs2: Unicode karakter kümesinin karakter başına iki bayt kullanarak UCS-2 kodlaması.
- utf16: UTF-16, karakter başına iki veya dört bayt kullanarak Unicode karakter kümesi için kodlama. ucs2 Tamamlayıcı karakterler için bir uzantı gibi .
- utf32: Karakter başına dört bayt kullanarak kodlayan UTF-32, Unicode karakter kümesidir.
Unicode Karakter Seti Genel Özellikleri
Karekter Seti | Karakterler | Bellek |
---|---|---|
utf8mb3, utf8 | Sadece BMP | 1, 2 veya 3 bayt |
ucs2 | Sadece BMP | 2bayt |
utf8mb4 | BMP ve tamamlayıcı | 1, 2, 3 veya 4 bayt |
utf16 | BMP ve tamamlayıcı | 2 veya 4 bayt |
utf32 | BMP ve tamamlayıcı | 4 bayt |
Utf8mb4_general_ci, utf8mb4_unicode_ci Karşılaştırma arasındaki farklar nelerdir?
Doğruluk
utf8mb4_unicode_ci : Çok geniş bir dil aralığında doğru sıralama yapan, sıralama ve karşılaştırma için Unicode standardına dayanır.
utf8mb4_general_ci : Belirli dilleri veya karakterleri kullanırken olduğu gibi, bazı durumlarda istenmeyen sıralamaya neden olacak tüm Unicode sıralama kurallarını uygulayamaz.
Performans
utf8mb4_general_ci : İlgili kısayollar aldığından performans karşılaştırma ve sıralamada daha hızlıdır. Modern sunucularda, bu performans artışı tümüyle göz ardı edilebilir. Sunucuların bugünün bilgisayarlarına kıyasla CPU performansının Düşük olduğu bir zamanda tasarlandı.
utf8mb4_unicode_ci : Sıralama ve karşılaştırma için Unicode kurallarını kullanan, çok çeşitli dillerde doğru sıralama için ve çok çeşitli özel karakterler kullanırken oldukça karmaşık bir algoritma kullanır. Bu kurallar dile özgü sözleşmeleri dikkate almalıdır; Herkes karakterlerini 'alfabetik sıra' olarak adlandıracağımız bir düzene göre sıralamaz.
Latin (yani "Avrupalı") dillere gelince, Unicode sıralama ve MySQL'de sadeleştirilmiş utf8mb4_general_ci sıralama arasında çok fazla fark yoktur , ancak hala birkaç fark vardır:
- utf8_unicode_ci standart Unicode Harmanlama Algoritmasını kullanır, örneğin genişleme ve bitiş harflerini destekler, örneğin: Almanca harf ß (U + 00DF LETTER SHARP S) "ss" ye göre sıralanır. Harf Œ (U + 0152 LATIN CAPITAL LIGATURE OE) "OE" yakınında sıralanır. utf8_general_ci karekter kodlaması bitişik harfleri desteklemiyor, tüm bu harfleri tek karakter olarak ve bazen yanlış sırada sıralıyor. utf8_general_ci genişlemeler, daralmalar veya göz ardı edilebilir karakterleri desteklemeyen eski bir harmanlamadır. Karakterler arasında yalnızca bire bir karşılaştırmalar yapabilir.
- Bazı Unicode karakterleri ihmal edilmiş olarak tanımlanır, yani sıralama düzenine sayılmamalı ve karşılaştırma bunun yerine sonraki karaktere taşınmalıdır. utf8mb4_unicode_ci bunları düzgün bir şekilde ele alır.
Asya dilleri veya farklı alfabeleri olan diller gibi latin olmayan dillerde, Unicode sıralama ve basitleştirilmiş utf8mb4_general_ci sıralama arasında çok daha fazla fark olabilir. utf8mb4_general_ci kullanılan dile büyük ölçüde bağlıdır. Bazı diller için oldukça yetersiz olabilir.
Unicode ve unicode_520 harmanlamaları arasındaki farklar nelerdir?
Unicode karakter karşılaştırması için daha eski bir standardı takip ederken, unicode_520 karakter karşılaştırması için daha yeni Unicode standardını izler.
Geçmişte, bazı webmsterlar utf8mb4_general_ci , performans sıralamasını haklı çıkaracak kadar doğru sıralamanın önemli olduğu durumlar dışında kullanılması öneriyordu . Bugün, bu performans maliyetinin hepsi ortadan kalktı, ve geliştiriciler uluslararasılaşmayı daha ciddiye alıyorlar.
Php kullananlar, veritabanı bağlantısında karekter setini utf8mb4
olarak ayarlamayı unutmayın.
$db->query("SET CHARACTER SET utf8mb4");
Kamil 24/12/2018
Ahmet 15/09/2019
yönetici 15/09/2019
- HTML
- CSS
- PHP
- JQUERY
- PHOTOSHOP
- JavaScript
- Web Dünyası
- Linux
- MİTHRİL FRAMEWORK
- Laravel
- Git
- React
- HTML LİNK(Bağlantı)EKLEME - LİNK VERME
- HTML YAZI VE RESİM ORTALAMA
- HTML RESME LİNK VERME
- HTML FORM OLUŞTURMA
- CSS YATAY MENÜ YAPIMI
- HTML RESİM EKLEME
- CSS (BOYUT) GENİŞLİK VE YÜKSEKLİK (Width-Height)
- HTML DİV ve SPAN NEDİR?
- HTML ARKAPLANA MÜZİK EKLEME
- KALİTE KAYBETMEDEN RESİMLERİ BÜYÜTME