Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

java.sql.SQLException:Giá trị chuỗi không chính xác:'\ xF0 \ x9F \ x91 \ xBD \ xF0 \ x9F ...'

Những gì bạn có là EXTRATERRESTRIAL ALIEN (U+1F47D) BROKEN HEART (U+1F494) không phải 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 hình vuông nếu bạn không sử dụng các phông chữ hỗ trợ chúng.

utf8 của MySQL chỉ hỗ trợ mặt phẳng đa ngôn ngữ cơ bản và bạn cần sử dụng utf8mb4 thay vào đó :

Đối với một ký tự phụ, 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ộtutf8 và bạn không cần lo lắng về việc chuyển đổi ký tự hoặc khóa 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. Mã hóa kết nối cần phải là utf8mb4 , bộ ký tự cần phải là utf8mb4 và collaction cần phải là utf8mb4 . Đối với java, nó vẫn chỉ là "utf-8" , nhưng MySQL cần có 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 đối với trình điều khiển để đặt bộ ký tự 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 phần 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 withcharacter_set_server =utf8mb4. Sau đó Connector / J sẽ sử dụng cài đặt đó miễn là characterEncoding có không được đặt trong 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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. thủ tục được lưu trữ mysql tự gọi đệ quy

  2. Cách chuyển đổi múi giờ trong MySQL

  3. Sự khác biệt trong MySQL JOIN so với LEFT JOIN

  4. Mysql có thể tách một cột không?

  5. Trường bảng có thể chứa dấu gạch nối không?