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:
-
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
-
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:
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?