Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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:
- Berkomunikasi dengan SQL Server (ODBC)
- Dukungan batas waktu koneksi dan kueri
- Kursor
- Peningkatan tanggal/waktu (ODBC)
- Menjalankan kueri (ODBC)
- Penanganan kesalahan dan pesan
- Otentikasi Kerberos
- Jenis yang ditentukan pengguna Common Language Runtime (CLR) berukuran besar (ODBC)
- Melakukan transaksi (ODBC). Untuk transaksi terdistribusi di Linux dan macOS, gunakan transaksi XA dengan DTC.
- Hasil pemrosesan (ODBC)
- Menjalankan prosedur tersimpan
- Dukungan sparse columns (ODBC)
- Menggunakan enkripsi tanpa validasi
- Parameter dengan nilai tabel
- UTF-8 dan UTF-16 untuk API perintah dan data
- Menggunakan fungsi katalog
Keterbatasan
Fitur-fitur berikut belum diverifikasi bekerja dengan benar di driver ODBC pada Linux dan macOS:
- Koneksi klaster failover.
- Transparent Network IP Resolution sebelum versi 17 Driver ODBC.
- Pelacakan Diagnostik Bawaan (BID) Driver ODBC Linux dan macOS pada versi sebelum ODBC Driver 17.3.
Fitur yang tidak didukung
Fitur-fitur berikut tidak tersedia di driver ODBC pada Linux dan macOS:
Transaksi terdistribusi melalui
SQL_ATTR_ENLIST_IN_DTCatribut. 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_DATASQL_COPT_SS_PERF_DATA_LOGSQL_COPT_SS_PERF_DATA_LOG_NOWSQL_COPT_SS_PERF_QUERYSQL_COPT_SS_PERF_QUERY_INTERVALSQL_COPT_SS_PERF_QUERY_LOG
SQLBrowseConnectsebelum 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_CURSORSdariSQLSetConnectAttr.
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
0xCAmengonversi ke titik0x05BAkode UTF-16 di Windows dan0x00CAdi macOS serta Linux denganlibiconvversi yang lebih awal dari 1.15. - Pustaka Linux
iconvtanpa 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
0x80dapat diubah menjadi U+0080 di Windows dan dapat menjadi U+30FB di Linux dan macOS, tergantung padaiconvversinya.
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:
- Pasang driver ODBC pada Linux.
- Instal driver ODBC di macOS.
- Pasang pengelola driver unixODBC.
- Konfigurasikan string koneksi dan DSN.
- Tinjau persyaratan sistem.