Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Saat menggunakan Entity Framework dengan MySQL, karakter Unicode diganti dengan karakter dasar

MySQL memungkinkan untuk mengonfigurasi beberapa aspek komunikasi klien-server (menurut 10.4 Kumpulan Karakter dan Kumpulan Karakter Koneksi dokumentasi):

  • Pengkodean sumber (yaitu klien):character_set_client
  • Enkoding tujuan (yaitu server):character_set_connection
  • Data dan meta-data yang dikembalikan:character_set_results

Saya menduga bahwa diasumsikan bahwa penyandian sumber, yang berasal dari teknologi Microsoft, adalah UTF-16 Little Endian.

Sedangkan untuk dua lainnya, Connector/ Referensi Opsi .NET Connection-String dokumentasi menyatakan:

Koneksi ke MySQL perlu diberi tahu bahwa pengkodean target adalah UTF-8 (yang digunakan kolom MySQL Anda). MySQL saat ini mengasumsikan bahwa Anda mengirim string non-Unicode, secara efektif melakukan hal yang sama seperti mengonversi ke VARCHAR di SQL Server, dengan asumsi bahwa halaman kode yang ditentukan oleh Pengumpulan default Database saat ini adalah 1252 (Halaman Kode Windows 1252 biasanya disebut sebagai "ANSI ", meskipun itu adalah secara teknis nama yang tidak akurat).

Berikut ini menunjukkan perilaku di SQL Server dengan tidak mengawali string dengan huruf besar "N":

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

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

Coba yang berikut ini untuk memperbaikinya:

  1. Upaya pertama harus menambahkan yang berikut ke string koneksi Anda untuk mengirim data karakter sebagai UTF-8 ke MySQL (ini seharusnya hanya mengatur character_set_connection ):

    CharSet=utf8;
    

    Contoh String Koneksi Lengkap di sini

  2. Upaya kedua harus mengirim perintah SQL, pada koneksi awal, untuk mengatur variabel tingkat sesi yang mengontrol penyandian tujuan:

    SET character_set_connection = utf8;
    

Untuk informasi lebih lanjut, silakan lihat berikut ini:

MySQL Charset/Collate

Menurut bagian "utf8 Collations" pada halaman itu, akan jauh lebih baik menggunakan utf8_unicode_ci untuk Collation alih-alih utf8_general_ci (untuk lebih jelasnya, rekomendasi ini tidak ada hubungannya dengan masalah konversi karakter yang dibahas di sini).

P.S. Pertanyaan / jawaban ini memiliki T&J pendamping di DBA.StackExhange:

Mengapa saya mendapatkan karakter yang salah saat mendekode string Base64 ke NVARCHAR di 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. Kustom ORDER BY untuk mengabaikan 'the'

  2. cara mencari string yang tepat di mysql

  3. Cara membuat skrip login yang aman di PHP dan MySQL

  4. Gabungkan bidang dari baris yang berbeda dengan syarat

  5. Datetime di belakang satu jam setelah penyisipan. Penghematan siang hari