Panduan pemrograman

Unduh driver ODBC

Artikel ini menjelaskan pertimbangan pemrograman untuk aplikasi yang menggunakan Microsoft ODBC Driver for SQL Server di Linux atau macOS. Beberapa tautan mengarah ke materi Native Client SQL Server. Halaman-halaman tersebut memberikan konteks API historis.

Pilih versi driver

Gunakan Microsoft ODBC Driver 18 untuk SQL Server, lini driver saat ini, untuk pengembangan baru. Microsoft ODBC Driver 17 untuk SQL Server tetap didukung untuk aplikasi yang sudah menerapkannya, sebagaimana dijelaskan dalam siklus hidup dukungan. ODBC Driver 13, yang disertakan dengan SQL Server 2017, memenuhi syarat untuk dukungan lanjutan hingga 12 Oktober 2027, hanya berdasarkan perjanjian dukungan yang diperluas.

Tentukan nama driver yang terpasang di string koneksi Anda, diapit dalam kurung kurawal:

Driver={ODBC Driver 18 for SQL Server}
Driver={ODBC Driver 17 for SQL Server}

Dalam nama sumber data (DSN) di odbc.ini, gunakan nama tanpa kurung kurawal, misalnya Driver = ODBC Driver 18 for SQL Server. Untuk sintaks DSN, lihat Kata kunci string koneksi dan nama sumber data (DSN-DSN).

Untuk pengaturan koneksi spesifik versi, lihat Perbedaan versi utama. Untuk tanggal dukungan dan kompatibilitas sistem operasi, lihat Siklus hidup Dukungan dan persyaratan sistem.

Buat aplikasi

Untuk lokasi header, urutan, perintah compiler, nama pustaka, dan contoh C++, lihat Kembangkan aplikasi C dan C++ dengan driver ODBC serta Hubungkan dan kueri dengan C++ dan ODBC.

Aplikasi ODBC dapat menggunakan Multiple Active Result Sets (MARS) dan fitur khusus SQL Server lainnya dengan menyertakan msodbcsql.h setelah header unixODBC (sql.h, sqlext.h, sqltypes.h, dan sqlucode.h). Gunakan nama simbolik yang sama untuk item spesifik SQL Server seperti yang Anda gunakan di aplikasi Windows ODBC.

Lihat kemampuan driver

Mulailah dengan Referensi Programmer ODBC untuk antarmuka pemrograman aplikasi (API) standar. Kemudian gunakan dokumentasi driver saat ini untuk perilaku spesifik driver.

Ikhtisar Microsoft ODBC Driver untuk SQL Server menautkan ke dokumentasi driver. Artikel SQL Server Native Client berikut menyediakan konteks API untuk aplikasi yang menggunakan driver di Linux dan macOS:

Keterbatasan

Fitur-fitur berikut belum diverifikasi bekerja dengan benar di driver ODBC pada Linux dan macOS:

Fitur yang tidak didukung

Fitur-fitur berikut tidak tersedia di driver ODBC pada Linux dan macOS:

  • Transaksi terdistribusi melalui SQL_ATTR_ENLIST_IN_DTC atribut. Driver mendukung transaksi XA melalui Koordinator Transaksi Terdistribusi Microsoft (DTC). Untuk informasi lebih lanjut, lihat Gunakan transaksi XA dengan DTC.

  • Pencerminan database.

  • FILESTREAM.

  • Memprofilkan kinerja driver ODBC, yang dibahas dalam SQLSetConnectAttr, serta atribut koneksi terkait kinerja berikut:

    • SQL_COPT_SS_PERF_DATA
    • SQL_COPT_SS_PERF_DATA_LOG
    • SQL_COPT_SS_PERF_DATA_LOG_NOW
    • SQL_COPT_SS_PERF_QUERY
    • SQL_COPT_SS_PERF_QUERY_INTERVAL
    • SQL_COPT_SS_PERF_QUERY_LOG
  • SQLBrowseConnect sebelum versi 17.2.

  • Tipe interval C seperti SQL_C_INTERVAL_YEAR_TO_MONTH, yang didokumentasikan dalam Data Type Identifiers and Descriptors.

  • Nilai atribut SQL_ATTR_ODBC_CURSORS dari SQLSetConnectAttr.

Kelola data teks

Di Linux dan macOS, gunakan buffer UTF-16 SQLWCHAR dengan API karakter lebar ODBC daripada tipe asli wchar_t . Antarmuka driver menggunakan unit kode 16-bit.

Pengkodean karakter

Untuk ODBC Driver 13 dan 13.1, Anda harus menggunakan UTF-8 untuk SQLCHAR data. Versi-versi ini tidak mendukung pengkodean lainnya.

Mulai dari ODBC Driver 17, set karakter dan pengkodean SQLCHAR data yang didukung meliputi:

Catatan

Karena iconv perbedaan antara musl dan glibc, banyak dari locale ini tidak didukung di Alpine Linux. Untuk informasi lebih lanjut, lihat Perbedaan fungsional dari glibc.

Nama Deskripsi
UTF-8 Ekasandi
CP437 MS-DOS Latin Amerika Serikat
CP850 MS-DOS Latin 1
CP874 Latin/Thai
CP932 Jepang (halaman kode Windows 932)
CP936 Tionghoa Sederhana, GBK
CP949 Bahasa Korea (halaman kode Windows 949)
CP950 Tionghoa Tradisional, Big5
CP1250 Eropa Tengah
CP1251 Sirilik
CP1252 Eropa Barat
CP1253 Yunani
CP1254 Bahasa Turki
CP1255 Ibrani
CP1256 Bahasa Arab
CP1257 Baltik
CP1258 Bahasa Vietnam
ISO-8859-1 Latin-1
ISO-8859-2 Latin-2
ISO-8859-3 Latin-3
ISO-8859-4 Latin-4
ISO-8859-5 Latin/Sirilik
ISO-8859-6 Latin/Arab
ISO-8859-7 Bahasa Latin/Yunani
ISO-8859-8 Ibrani
ISO-8859-9 Bahasa Turki
ISO-8859-13 Latin-7
ISO-8859-15 Latin-9

Saat Anda terhubung, driver mendeteksi setelan lokal saat ini dari proses tempat driver dimuat. Jika lokal menggunakan salah satu pengkodean yang terdaftar, driver menggunakan pengkodean tersebut untuk SQLCHAR data (karakter sempit). Jika tidak, default-nya menggunakan UTF-8. Proses dimulai di locale C secara default, yang menyebabkan driver default ke UTF-8. Jika sebuah aplikasi membutuhkan salah satu pengkodean yang tercantum, panggil setlocale sebelum menghubungkan. Tentukan locale secara eksplisit, atau gunakan string kosong (misalnya, setlocale(LC_ALL, "")) untuk menggunakan pengaturan locale dari environment.

Dalam lingkungan Linux atau macOS yang biasanya menggunakan pengkodean UTF-8, pengguna ODBC Driver 17 yang melakukan upgrade dari 13 atau 13.1 tidak akan melihat perbedaan. Aplikasi yang menggunakan pengkodean non-UTF-8 yang terdaftar melalui setlocale perlu menggunakan pengkodean tersebut untuk data ke dan dari driver, bukan UTF-8.

Anda harus menggunakan UTF-16LE (little endian) untuk data SQLWCHAR .

Ketika Anda mengikat parameter input dengan menggunakan SQLBindParameter, jika Anda menentukan tipe SQL karakter sempit seperti SQL_VARCHAR, driver mengonversi data yang disediakan dari pengkodean klien ke pengkodean sisi server untuk parameter tersebut. Pengkodean tergantung pada kolasi; tidak selalu merupakan kode halaman 1252. Untuk parameter output, driver mengonversi pengodean yang ditentukan dalam informasi kolasi yang terkait dengan data menjadi pengodean klien. Karakter dalam pengkodean sumber yang tidak dapat direpresentasikan dalam pengkodean target akan berubah menjadi tanda tanya (?).

Untuk menghindari kehilangan data ini saat mengikat parameter input, tentukan tipe karakter Unicode SQL seperti SQL_WVARCHAR. Driver mengonversi pengkodean klien menjadi UTF-16, yang dapat mewakili semua karakter Unicode. Kolom atau parameter target juga harus berupa tipe Unicode (nchar, nvarchar, atau ntext) atau tipe dengan kolasi atau pengkodean yang dapat mewakili semua data sumber asli. Untuk parameter output, tentukan tipe SQL Unicode dan baik tipe C Unicode (SQL_C_WCHAR), yang menyebabkan driver mengembalikan data sebagai UTF-16, atau tipe C sempit dengan encoding klien yang dapat mewakili data sumber. UTF-8 selalu dapat merepresentasikan data ini.

Untuk informasi lebih lanjut tentang kolasi dan pengkodean, lihat Dukungan Kolasi dan Unicode.

Ada perbedaan konversi antara versi Windows dan Linux atau macOSiconv:

  • Untuk halaman kode 1255, byte 0xCA mengonversi ke titik 0x05BA kode UTF-16 di Windows dan 0x00CA di macOS serta Linux dengan libiconv versi yang lebih awal dari 1.15.
  • Pustaka Linux iconv tanpa revisi 2003 dari Big5/CP950 (BIG5-2003) tidak mengonversi karakter yang ditambahkan dalam revisi tersebut dengan benar.
  • Untuk halaman kode 932 (Jepang, Shift-JIS), pendekodean karakter yang tidak didefinisikan dalam standar pengkodean berbeda. Misalnya, byte 0x80 dapat diubah menjadi U+0080 di Windows dan dapat menjadi U+30FB di Linux dan macOS, tergantung pada iconv versinya.

Di ODBC Driver 13 dan 13.1, membagi karakter multibyte UTF-8 atau surrogate UTF-16 di antara SQLPutData buffer akan menyebabkan kerusakan data. Gunakan buffer streaming yang tidak berakhir dengan pengkodean karakter parsial. Pembatasan ini dihapus di ODBC Driver 17.

Untuk panduan pengkodean karakter, konversi, pengikatan parameter, dan ukuran buffer, lihat Masalah yang diketahui.

OpenSSL

Mulai dari ODBC Driver 17.4, driver memuat OpenSSL secara dinamis, yang memungkinkan driver berjalan pada sistem yang memiliki versi 1.0 atau 1.1 tanpa file driver terpisah. Dimulai dengan versi 17.9, driver mendukung OpenSSL 3.0 selain versi sebelumnya. Ketika terdapat beberapa versi OpenSSL, driver berusaha memuat versi yang didukung dari jalur pencarian perpustakaannya.

Versi driver Versi OpenSSL yang didukung
17.4 hingga 17.8 1.0, 1.1
versi 17.9 dan versi 17.x setelahnya, serta semua versi Driver 18 1.0, 1.1, 3.0

OpenSSL 4 tidak didukung. Di macOS, tautan Homebrew openssl yang mengarah ke OpenSSL 4 dapat mencegah driver memuat OpenSSL 3 bahkan saat OpenSSL 3 terpasang. Periksa jalur pustaka serta versi yang terpasang.

Catatan

Konflik potensial dapat terjadi jika aplikasi yang menggunakan driver, atau salah satu komponennya, ditautkan dengan atau memuat secara dinamis versi OpenSSL yang berbeda. Jika beberapa versi OpenSSL ada di sistem dan aplikasi menggunakannya, pastikan versi yang dimuat oleh aplikasi dan driver tidak sesuai. Kesalahan tersebut dapat merusak memori dan mungkin tidak muncul secara jelas atau konsisten.

Alpine Linux

Ukuran tumpukan default untuk thread baru di dalam musl adalah 128 KB kecuali executable meminta default yang lebih besar. Sebuah thread dapat melebihi batas ini saat memanggil driver. Tautkan aplikasi ODBC di Alpine Linux dengan -Wl,-z,stack-size=<size_in_bytes> untuk meminta tumpukan thread default yang lebih besar. Aplikasi yang membuat thread dengan ukuran tumpukan eksplisit juga harus memilih ukuran yang memadai untuk thread tersebut.

Tumpukan thread utama dan tumpukan default untuk thread baru tidak memiliki pengaturan yang sama. Pada glibc sistem, default untuk thread baru biasanya mengikuti batas sumber daya stack proses, dengan cadangan khusus arsitektur ketika batas tersebut tidak terbatas. Jangan berasumsi default tetap 2 MB di seluruh sistem Linux.

Catatan tambahan

Untuk membuat koneksi administrator khusus (DAC) dari aplikasi ODBC, atur Server=tcp:<server>,<dac_port> di string koneksi Anda. Gunakan port DAC yang ditemukan, bukan port koneksi biasa milik instance. Misalnya, jika port DAC adalah 33000, atur Server=tcp:<server>,33000. Fragmen string-koneksi ini hanya menentukan endpoint, bukan autentikasi. Konfigurasikan autentikasi dan validasi sertifikat server secara terpisah.

Login harus merupakan anggota peran server sysadmin. Akses jarak jauh mengharuskan opsi koneksi admin jarak jauh server diaktifkan. Untuk persyaratan akses, konfigurasi server, dan prosedur administrasi baris perintah, lihat Koneksi Diagnostik untuk administrator basis data. Untuk penemuan port, lihat port DAC.

Driver manager unixODBC menangani atribut pernyataan yang diteruskan SQLSetConnectAttr dengan cara yang sama seperti Windows Driver Manager. Opsi pernyataan ODBC 2.x, seperti SQL_ATTR_QUERY_TIMEOUT dan SQL_ATTR_MAX_ROWS, berlaku untuk pernyataan yang ada dan baru pada koneksi. Atribut hanya untuk statement ODBC 3.x, seperti SQL_ATTR_ROW_ARRAY_SIZE dan SQL_ATTR_PARAMSET_SIZE, mengembalikan SQLSTATE HY092. Atribut yang didefinisikan pada kedua tingkat, koneksi dan pernyataan, seperti SQL_ATTR_METADATA_ID, dapat diatur pada salah satu tingkat. Mengatur atribut khusus pernyataan pada tingkat koneksi sudah tidak digunakan di ODBC 3.x, jadi panggil SQLSetStmtAttr saja. Untuk informasi lebih lanjut, lihat fungsi SQLSetConnectAttr.

Dalam aplikasi yang sangat multithreaded, validasi handle unixODBC dapat menjadi hambatan performa. Mengompilasi unixODBC dengan --enable-fastvalidate mungkin meningkatkan performa. Namun, opsi ini mungkin menyebabkan aplikasi yang meneruskan handle tidak valid ke API ODBC menjadi crash alih-alih mengembalikan SQL_INVALID_HANDLE.

Untuk langkah instalasi dan konfigurasi platform, lihat: