Dukungan UTF-8 di Driver OLE DB untuk SQL Server

Berlaku untuk: SQL Server Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)

Unduh driver OLE DB

Driver Microsoft OLE DB untuk SQL Server (versi 18.2.1) menambahkan dukungan untuk pengodean server UTF-8. Untuk informasi tentang dukungan UTF-8 SQL Server, 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

Microsoft OLE DB Driver for 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 dengan 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 kolase 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 kolase database; konversi server dari halaman kode kolase database ke halaman kode kolase kolom. Pastikan halaman kode klien dan halaman kode kolase 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 kolase 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 kolase database; konversi server dari halaman kode kolase database ke halaman kode kolase kolom. Pastikan halaman kode kolase 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 UTF-16 ke halaman kode kolase 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 tipe 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 memasukkan 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