UTF-8 değişken uzunluklu bir kodlamadır. UTF-8 durumunda bu, bir kod noktasının saklanmasının bir ila dört bayt gerektirdiği anlamına gelir. Ancak, MySQL'in "utf8" ("utf8mb3" diğer adı) adlı kodlaması, kod noktası başına en fazla üç bayt depolar.
Bu nedenle "utf8" / "utf8mb3" karakter kümesi tüm Unicode kod noktalarını saklayamaz: yalnızca " Temel Çok Dilli Düzlem " olarak adlandırılan 0x000 - 0xFFFF aralığını destekler . Ayrıca bkz . Unicode kodlamalarının karşılaştırılması .
MySQL belgelerinin bu konuda (aynı sayfanın önceki bir sürümü) söylediği şey budur:
Utf8 [/ utf8mb3] adlı karakter kümesi, karakter başına maksimum üç bayt kullanır ve yalnızca BMP karakterlerini içerir. MySQL 5.5.3 itibariyle, utf8mb4 karakter seti ek karakterleri destekleyen karakter başına maksimum dört bayt kullanır:
Bir BMP karakteri için utf8 [/ utf8mb3] ve utf8mb4 aynı depolama özelliklerine sahiptir: aynı kod değerleri, aynı kodlama, aynı uzunluk.
Tamamlayıcı bir karakter için utf8 [/ utf8mb3] karakteri hiç saklayamazken, utf8mb4 onu saklamak için dört bayt gerektirir. Utf8 [/ utf8mb3] karakteri hiç saklayamadığından, utf8 [/ utf8mb3] sütunlarında herhangi bir tamamlayıcı karakteriniz yoktur ve eski sürümlerinden utf8 [/ utf8mb3] verilerini yükseltirken karakterleri dönüştürme veya veri kaybetme konusunda endişelenmenize gerek yoktur MySQL.
Bu nedenle, sütununuzun emoji gibi BMP'nin dışındaki karakterleri depolamasını (ve genellikle yapmak istediğinizi) desteklemesini istiyorsanız , "utf8mb4" kullanın. Ayrıca bkz . Gerçek kullanımda en yaygın BMP olmayan Unicode karakterler nelerdir? .