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

Khi sử dụng Entity Framework với MySQL, các ký tự Unicode được thay thế bằng các ký tự cơ bản

MySQL cho phép định cấu hình một số khía cạnh của giao tiếp máy khách-máy chủ (theo 10.4 Bộ ký tự kết nối và ghép nối tài liệu):

  • Mã hóa nguồn (tức là máy khách):character_set_client
  • Mã hóa đích (tức là máy chủ):character_set_connection
  • Dữ liệu được trả về và siêu dữ liệu:character_set_results

Tôi đoán rằng có thể giả định rằng mã nguồn, đến từ công nghệ của Microsoft, là UTF-16 Little Endian.

Đối với hai phần còn lại, Trình kết nối / Tham chiếu tùy chọn chuỗi kết nối NET trạng thái tài liệu:

Kết nối với MySQL cần được thông báo rằng mã hóa đích là UTF-8 (là những gì các cột MySQL của bạn đang sử dụng). MySQL hiện đang giả định rằng bạn đang gửi các chuỗi không phải Unicode, thực hiện hiệu quả tương tự như chuyển đổi thành VARCHAR trong SQL Server, giả sử rằng trang mã được chỉ định bởi Đối chiếu mặc định của Cơ sở dữ liệu hiện tại là 1252 (Trang mã Windows 1252 thường được gọi là " ANSI ", ngay cả khi đó là về mặt kỹ thuật tên không chính xác).

Phần sau cho thấy hành vi trong SQL Server bằng cách không đặt trước chuỗi bằng chữ hoa "N":

SELECT 'α'; -- Database's default Collation = Latin1_General_100_CI_AS_SC
-- a

SELECT 'α'; -- Database's default Collation = Hebrew_100_BIN2
-- ?

Hãy thử những cách sau để khắc phục sự cố này:

  1. Nỗ lực đầu tiên phải là thêm phần sau vào chuỗi kết nối của bạn để gửi dữ liệu ký tự dưới dạng UTF-8 tới MySQL (điều này chỉ nên đặt character_set_connection ):

    CharSet=utf8;
    

    Ví dụ về chuỗi kết nối đầy đủ tại đây

  2. Lần thử thứ hai sẽ là gửi một lệnh SQL, trên kết nối ban đầu, để đặt biến cấp phiên điều khiển mã hóa đích:

    SET character_set_connection = utf8;
    

Để biết thêm thông tin, vui lòng xem phần sau:

Bộ mã / đối chiếu MySQL

Theo phần "utf8 Collations" của trang đó, sẽ tốt hơn nhiều nếu sử dụng utf8_unicode_ci cho Collation thay vì utf8_general_ci (nói rõ, đề xuất này không liên quan gì đến vấn đề chuyển đổi ký tự đang được giải quyết ở đây).

P.S. Câu hỏi / câu trả lời này có phần Hỏi &Đáp đồng hành trên DBA.StackExhange:

Tại sao tôi nhận được ký tự không chính xác khi giải mã chuỗi Base64 thành NVARCHAR trong SQL Server?




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL được định cấu hình không đúng lý do:sử dụng đường dẫn tương đối không an toàn

  2. Xóa hàng nếu bảng tồn tại SQL

  3. MySQL Chọn truy vấn để tìm nạp cơ sở bản ghi trên các giá trị danh sách

  4. MySQL cập nhật một trường với một biến tăng dần

  5. truy vấn chậm mysql