Những gì bạn có là gì EXTRATERRESTRIAL ALIEN (U+1F47D)
và BROKEN HEART (U+1F494)
không có trong bình diện đa ngôn ngữ cơ bản. Chúng thậm chí không thể được biểu diễn trong java dưới dạng một ký tự "👽💔".length() == 4
,. Chúng chắc chắn không phải là các ký tự rỗng và người ta sẽ thấy các ô vuông nếu bạn không sử dụng các phông chữ hỗ trợ chúng.
MySQL utf8
chỉ hỗ trợ mặt phẳng đa ngôn ngữ cơ bản và utf8mb4
thay vào đó bạn cần sử dụng :
Đối với một ký tự bổ sung, utf8 hoàn toàn không thể lưu trữ ký tự, trong khi utf8mb4 yêu cầu bốn byte để lưu trữ. Vì utf8 hoàn toàn không thể lưu trữ ký tự, bạn không có bất kỳ ký tự bổ sung nào trong các cột utf8 và bạn không cần lo lắng về việc chuyển đổi ký tự hoặc mất dữ liệu khi nâng cấp dữ liệu utf8 từ các phiên bản MySQL cũ hơn.
Vì vậy, để hỗ trợ các ký tự này, MySQL của bạn cần phải là 5.5+ và bạn cần sử dụng utf8mb4
ở mọi nơi. Cần phải có mã hóa kết nối, cần phải có utf8mb4
bộ ký tự utf8mb4
và cần phải có cấu kết utf8mb4
. Đối với java, nó vẫn chỉ là một "utf-8"
, nhưng MySQL cần một sự khác biệt.
Tôi không biết bạn đang sử dụng trình điều khiển nào nhưng một cách bất khả tri dành cho trình điều khiển để đặt bộ mã kết nối là gửi truy vấn:
SET NAMES 'utf8mb4'
Ngay sau khi thực hiện kết nối.
Xem thêm điều này cho Connector / J :
14.14: Làm cách nào để sử dụng UTF8 4 byte, utf8mb4 với Connector / J?
Để sử dụng UTF8 4 byte với Connector / J, hãy cấu hình máy chủ MySQL với character_set_server = utf8mb4. Connector / J sau đó sẽ sử dụng cài đặt đó
miễn là chưa đặt Mã hóa ký tự trong chuỗi kết nối . Điều này tương đương với tự động phát hiện bộ ký tự.
Điều chỉnh các cột và cơ sở dữ liệu của bạn:
var1 varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL
Một lần nữa, phiên bản MySQL của bạn cần phải tương đối cập nhật để hỗ trợ utf8mb4.