Dukungan UTF-8 di Driver OLE DB untuk SQL Server
Berlaku untuk: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
Driver Microsoft OLE DB untuk SQL Server (versi 18.2.1) menambahkan dukungan untuk pengodean server UTF-8. Untuk informasi tentang dukungan SQL Server UTF-8, lihat:
Driver versi 18.4.0 menambahkan dukungan untuk pengodean klien UTF-8 (diaktifkan dengan kotak centang "Gunakan Unicode UTF-8 untuk dukungan bahasa di seluruh dunia" di bawah Pengaturan Wilayah di Windows 10 dan Windows 11).
Catatan
Driver Microsoft OLE DB untuk SQL Server menggunakan fungsi GetACP untuk menentukan pengodean buffer input DBTYPE_STR.
Skenario di mana GetACP mengembalikan pengodean UTF-8 (diaktifkan dengan kotak centang "Gunakan Unicode UTF-8 untuk dukungan bahasa di seluruh dunia" di bawah Pengaturan Wilayah di Windows 10 dan Windows 11) didukung dimulai dengan versi 18.4. Di versi sebelumnya, jika buffer perlu menyimpan data Unicode, jenis data buffer harus diatur ke DBTYPE_WSTR (dikodekan UTF-16).
Penyisipan data ke dalam kolom CHAR atau VARCHAR yang dikodekan UTF-8
Saat membuat buffer parameter input untuk penyisipan, buffer dijelaskan dengan menggunakan array struktur DBBINDING. Setiap struktur DBBINDING mengaitkan satu parameter ke buffer konsumen dan berisi informasi seperti panjang dan jenis nilai data. Untuk buffer parameter input jenis CHAR, wType struktur DBBINDING harus diatur ke DBTYPE_STR. Untuk buffer parameter input jenis WCHAR, wType struktur DBBINDING harus diatur ke DBTYPE_WSTR.
Saat menjalankan perintah dengan parameter, driver membuat informasi jenis data parameter. Jika jenis buffer input dan jenis data parameter cocok, tidak ada konversi yang dilakukan di driver. Jika tidak, driver mengonversi buffer parameter input ke jenis data parameter. Jenis data parameter dapat diatur secara eksplisit oleh pengguna dengan memanggil ICommandWithParameters::SetParameterInfo. Jika informasi tidak disediakan, driver memperoleh informasi jenis data parameter dengan (a) mengambil metadata kolom dari server saat pernyataan disiapkan, atau (b) mencoba konversi default dari jenis data parameter input.
Buffer parameter input dapat dikonversi ke kolase kolom server oleh driver atau oleh server tergantung pada jenis data buffer input dan jenis data parameter. Selama konversi, kehilangan data dapat terjadi jika halaman kode klien atau halaman kode kolaborasi database tidak dapat mewakili semua karakter dalam buffer input. Tabel berikut ini menjelaskan proses konversi saat menyisipkan data ke dalam kolom yang diaktifkan UTF-8:
Jenis data buffer | Jenis data parameter | Konversi | Tindakan pencegahan pengguna |
---|---|---|---|
DBTYPE_STR | DBTYPE_STR | Konversi server dari halaman kode klien ke halaman kode kolab database; konversi server dari halaman kode kolaksi database ke halaman kode kolaksi kolom. | Pastikan halaman kode klien dan halaman kode kolaterasi database dapat mewakili semua karakter dalam data input. Misalnya, untuk menyisipkan karakter Polandia, halaman kode klien dapat diatur ke 1250 (ANSI Eropa Tengah), dan kolase database dapat menggunakan Polandia sebagai penunjuk kolase (misalnya, Polish_100_CI_AS_SC) atau diaktifkan UTF-8. |
DBTYPE_STR | DBTYPE_WSTR | Konversi driver dari halaman kode klien ke pengodean UTF-16; konversi server dari pengodean UTF-16 ke halaman kode kolab kolom. | Pastikan halaman kode klien dapat mewakili semua karakter dalam data input. Misalnya, untuk menyisipkan karakter Polandia, halaman kode klien dapat diatur ke 1250 (ANSI Eropa Tengah). |
DBTYPE_WSTR | DBTYPE_STR | Konversi driver dari pengodean UTF-16 ke halaman kode kolab database; konversi server dari halaman kode kolaksi database ke halaman kode kolaksi kolom. | Pastikan halaman kode kolaterasi database dapat mewakili semua karakter dalam data input. Misalnya, untuk menyisipkan karakter Polandia, halaman kode kolase database dapat menggunakan Polandia sebagai penunjuk kolase (misalnya, Polish_100_CI_AS_SC) atau diaktifkan UTF-8. |
DBTYPE_WSTR | DBTYPE_WSTR | Konversi server dari halaman UTF-16 ke kode kolab kolom. | Tidak ada. |
Pengambilan data dari kolom CHAR atau VARCHAR yang dikodekan UTF-8
Saat membuat buffer untuk data yang diambil, buffer dijelaskan dengan menggunakan array struktur DBBINDING. Setiap struktur DBBINDING mengaitkan satu kolom dalam baris yang diambil. Untuk mengambil data kolom sebagai CHAR, atur wType struktur DBBINDING ke DBTYPE_STR. Untuk mengambil data kolom sebagai WCHAR, atur wType struktur DBBINDING ke DBTYPE_WSTR.
Untuk indikator jenis buffer hasil DBTYPE_STR, driver mengonversi data yang dikodekan UTF-8 ke pengodean klien. Pengguna harus memastikan pengodean klien dapat mewakili data dari kolom UTF-8, jika tidak, kehilangan data dapat terjadi.
Untuk indikator jenis buffer hasil DBTYPE_WSTR, driver mengonversi data yang dikodekan UTF-8 ke pengodean UTF-16.
Komunikasi dengan server yang tidak mendukung UTF-8
Driver Microsoft OLE DB untuk SQL Server memastikan data terekspos ke server dengan cara yang dapat dipahami server. Saat menyisipkan data dari klien yang diaktifkan UTF-8, driver menerjemahkan string yang dikodekan UTF-8 ke halaman kode kolase database sebelum mengirimkannya ke server.
Catatan
Menggunakan antarmuka ISequentialStream untuk menyisipkan data yang dikodekan UTF-8 ke dalam kolom teks warisan hanya terbatas pada server yang mendukung UTF-8. Untuk detailnya, lihat BLOB dan Objek OLE.
Lihat Juga
Driver OLE DB untuk Fitur SQL Server
Dukungan UTF-16 di Driver OLE DB untuk SQL Server