Sahip olduğunuz EXTRATERRESTRIAL ALIEN (U+1F47D)
ve BROKEN HEART (U+1F494)
temel çok dilli düzlemde olmayanlar. Java'da tek karakter olarak bile temsil edilemezler "👽💔".length() == 4
. Kesinlikle boş karakterler değillerdir ve onları destekleyen yazı tiplerini kullanmıyorsanız kareler göreceksiniz.
MySQL utf8
yalnızca temel çok dilli düzlemi destekler ve utf8mb4
bunun yerine kullanmanız gerekir :
Ek bir karakter için utf8 karakteri hiç saklayamazken utf8mb4'ün saklaması için dört bayta ihtiyaç vardır. Utf8 karakteri hiç depolayamadığından, utf8 sütunlarında herhangi bir ek karakter yoktur ve MySQL'in eski sürümlerinden utf8 verilerini yükseltirken karakterleri dönüştürmek veya verileri kaybetmek konusunda endişelenmenize gerek yoktur.
Dolayısıyla bu karakterleri desteklemek için MySQL'inizin 5.5+ olması ve utf8mb4
her yerde kullanmanız gerekir . Bağlantı kodlamasının olması utf8mb4
, karakter setinin olması utf8mb4
ve collaction olması gerekiyor utf8mb4
. Java için hala adil "utf-8"
, ancak MySQL'in bir ayrıma ihtiyacı var.
Hangi sürücüyü kullandığınızı bilmiyorum, ancak bağlantı karakter kümesini ayarlamanın sürücüden bağımsız bir yolu sorguyu göndermektir:
SET NAMES 'utf8mb4'
Bağlantıyı yaptıktan hemen sonra.
Ayrıca Connector / J için buna bakın :
14.14: 4 baytlık UTF8, utf8mb4'ü Connector / J ile nasıl kullanabilirim?
4 baytlık UTF8'i Bağlayıcı / J ile kullanmak için MySQL sunucusunu character_set_server = utf8mb4 ile yapılandırın. Bağlayıcı / J sonra bu ayarı kullanacaktır
uzun characterEncoding etti olduğunca değil bağlantı dizesinde seti olmuştur . Bu, karakter kümesinin otomatik olarak algılanmasına eşdeğerdir.
Sütunlarınızı ve veritabanınızı da ayarlayın:
var1 varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL
Yine, MySQL sürümünüzün utf8mb4 desteği için nispeten güncel olması gerekir.