2010-06-14 47 views
19

Tôi có một ứng dụng Web Java chạy trên GlassFish 3 và JPA (EclipseLink) trên MySQL. Vấn đề tôi phải đối mặt là nếu tôi đang lưu các thực thể vào cơ sở dữ liệu với phương thức update(), các trường String mất tính toàn vẹn; '?' được hiển thị thay vì một số ký tự.Mã hóa ký tự JDBC

Máy chủ, trang và cơ sở dữ liệu được định cấu hình để sử dụng UTF-8.

Sau khi tôi đăng dữ liệu biểu mẫu, trang tiếp theo hiển thị dữ liệu chính xác. Hơn nữa nó "có vẻ" trong NetBeans gỡ lỗi rằng tài sản String của thực thể hiện tại lưu trữ giá trị chính xác quá. Dunno nếu gỡ lỗi NetBeans có thể được tin cậy; có thể là nó giải mã chính xác, tuy nhiên nó không chính xác.

+3

Cơ sở dữ liệu và chuỗi kết nối nào bạn đang sử dụng? –

+0

Tôi đang sử dụng MySQL và chuỗi kết nối là: 'jdbc: mysql: // localhost: 3306/administer' –

+0

Một liên kết dành cho những người đang tìm cách sử dụng utf8mb4: http://dev.mysql.com/doc/connector -j/vi/connector-j-reference-charsets.html –

Trả lời

43

Đó là JDBC, không JPA mà xác định mã hóa:

jdbc:mysql://localhost:3306/administer?characterEncoding=utf8 
+0

+1 Cảm ơn bạn rất hữu ích :) –

+1

Chỉ cần một sidenote cho những người đi qua cùng một vấn đề: nếu bạn muốn tham số chuỗi trong địa chỉ JDBC trong 'persistence của bạn .xml', bạn phải viết lại '&' là '&'. Ví dụ: 'jdbc: mysql: // localhost: 3306/quản trị? RewriteBatchedStatements = true & characterEncoding = UTF-8' –

+0

Đối với phiên bản mới hơn của trình điều khiển jdbc (> = 5.1.13), không chỉ định" characterEncoding ". Có một cái nhìn: http://stackoverflow.com/a/18059663/967062 –

11

Tôi giải quyết nó như sau: Tôi sử dụng giao diện quản trị GlassFish để thêm thuộc tính này để thiết lập hồ kết nối của tôi:

characterEncoding = UTF-8

0

Tôi cũng phải thêm useUnicode = true, vì vậy tôi phải kết hợp các tham số với '& 'để nó trông như thế này:

jdbc:mysql://127.0.0.1:3306/warranteer?useUnicode=true&characterEncoding=UTF-8 

Nếu bạn đang sử dụng hồ sơ maven để đặt URL MySQL, như tôi, chắc chắn rằng bạn đặt & thay & vì maven unescape url khi viết các tập tin persistence.xml vào thư mục lớp học.

1

Trình điều khiển JDBC phiên bản mới tự động phát hiện ký tựEncoding. Bạn không cần phải đặt rõ ràng.

Các vấn đề liên quan