Tôi hiện đang xây dựng một ứng dụng web MVC của Spring và cơ sở dữ liệu là phần phụ trợ quan trọng. Tuy nhiên, vì bất kỳ lý do gì, Spring từ chối xử lý dữ liệu dưới dạng UTF-8. Vì các khung nhìn, tài nguyên và trình duyệt được đặt thành Unicode và các bảng trong cơ sở dữ liệu (và cũng đọc một số câu hỏi tương tự), tôi đã thiết lập vấn đề nằm trong kết nối cơ sở dữ liệu.Cách đặt thuộc tính useUnicode = true và characterEncoding = utf8 trên kết nối JDBC của MySQL do Spring quản lý
Các JDBC driver cần được cung cấp hai mục trong connectionProperties: useUnicode (thiết lập để có và characterEncoding (thiết lập để utf8) Hóa ra, tuy nhiên, đó là không thể
JDBC là một.. đậu, và như vậy được cấu hình thông qua một tập tin XML, như vậy:
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/<database>" />
<property name="username" value="<not telling>" />
<property name="password" value="<not telling>" />
thiết lập này chuyển đổi tất cả các ký tự không tự chữ và số kéo từ cơ sở dữ liệu (chẳng hạn như mũi tên hoặc chữ cái Hy Lạp) vào câu hỏi điểm. Đó là, rõ ràng, không thể chấp nhận.
tôi đã cố gắng nhiều giải pháp: chỉ định URL JDBC như jdbc:mysql://localhost:3306/<database>?useUnicode=yes&characterEncoding=utf8
, chơi với my.ini
tập tin (và MySQL Workbench) để buộc tất cả mọi thứ trong cơ sở dữ liệu để mặc định utf8
charset, và cái gì đó gây ra đau đầu lớn nhất: thêm <property name="connectionProperties" value="useUnicode=yes;characterEncoding=utf8" />
. Hóa ra, không thể thiết lập hai connectionProperties trong một bean đơn, bởi vì ... không có ký tự phân tách được đề cập ở bất kỳ đâu (bean sẽ cố đọc nó khi cố gắng đặt yes;characterEncoding=utf8
làm giá trị useUnicode
). Vì vậy, câu hỏi của tôi là: làm thế nào để tôi utf8?
Có lẽ bạn cần dấu chấm phẩy sau 'characterEncoding = utf8', như được đề cập ở đây: http://stackoverflow.com/questions/13359683/how-to-use-useunicode-yes-characterencoding-utf-8-with- dbcp – GriffeyDog
@GriffeyDog Tôi đặt dấu chấm phẩy ở đó, tôi đã không sao chép nó từ mã. Nó sẽ không cho phép tôi biên dịch mà không có ai (tốt, nó sẽ - nhưng tôi sẽ nhận được một ngoại lệ ngay sau đó). –