Programlama yönergeleri

ODBC sürücüsü indirme

Bu makale, Linux veya macOS üzerinde SQL Server için Microsoft ODBC Sürücüsü kullanan uygulamalarla ilgili programlama hususlarını açıklar. Bazı bağlantılar SQL Server Native Client materyaline işaret ediyor. Bu sayfalar tarihsel API bağlamı sağlar.

Bir sürücü versiyonu seçin

Yeni geliştirme için mevcut sürücü hattı olan SQL Server için Microsoft ODBC Driver 18 kullanın. Microsoft ODBC Driver 17 for SQL Server, destek yaşam döngüsünde tanımlandığı gibi, zaten onu dağıtan uygulamalar için desteklenmeye devam ediyor. SQL Server 2017 ile birlikte gelen ODBC Driver 13, yalnızca genişletilmiş destek anlaşması kapsamında 12 Ekim 2027'ye kadar genişletilmiş destek için uygundur.

Kurulumlu sürücü adını, bağlantı dizenizde, braketlerle birlikte belirtin:

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

Bir veri kaynağı adında (DSN) odbc.ini, adı küme parantezleri olmadan kullanın, örneğin Driver = ODBC Driver 18 for SQL Server. DSN sözdizimi için bkz. Bağlantı dizesi anahtar kelimeleri ve veri kaynağı adları (DSN'ler).

Sürüme özgü bağlantı ayarları için bkz. Büyük sürüm farklılıkları. Destek tarihleri ve işletim sistemi uyumluluğu için bkz. Destek yaşam döngüsü ve Sistem gereksinimleri.

Uygulama oluşturun

Başlık konumları, sıra, derleyici komutları, kitaplık adları ve bir C++ örneği için ODBC sürücüsüyle C ve C++ uygulamaları geliştirme ve C++ ve ODBC ile bağlanma ve sorgulama bölümlerine bakın.

Bir ODBC uygulaması, unixODBC başlıklarının (sqltypes.h, sqlext.h, sqlucode.h ve msodbcsql.h) sonrasına sql.h ekleyerek Çoklu Etkin Sonuç Kümeleri'ni (MARS) ve SQL Server'a özgü diğer özellikleri kullanabilir. Windows ODBC uygulamalarında kullandığınız SQL Server'a özgü öğeler için aynı sembolik isimleri kullanın.

Sürücü özelliklerini bul

Standart uygulama programlama arayüzü (API) için ODBC Programcı Referansı ile başlayın. Sonra sürücüye özgü davranış için mevcut sürücü dokümantasyonunu kullanın.

Microsoft ODBC Driver for SQL Server genel bakışı, sürücü belgelerine bağlantı verir. Aşağıdaki SQL Server Native Client makaleleri, sürücüyü Linux ve macOS'ta kullanan uygulamalar için API bağlamı sağlar:

Limitations

Linux ve macOS'ta ODBC sürücüsünde aşağıdaki özelliklerin doğru çalıştığı doğrulanmamıştır:

Desteklenmeyen özellikler

Linux ve macOS'ta ODBC sürücüsünde aşağıdaki özellikler mevcut değildir:

  • SQL_ATTR_ENLIST_IN_DTC özniteliği aracılığıyla dağıtılmış işlemler. Sürücü, Microsoft Dağıtılmış İşlem Düzenleyicisi (DTC) aracılığıyla XA işlemlerini destekler. Daha fazla bilgi için bkz. DTC ile XA işlemlerini kullanma.

  • Veritabanı yansıtma.

  • FILESTREAM.

  • SQLSetConnectAttr'da ele alınan ODBC sürücüsü performansının profillenmesi ve performansla ilgili şu bağlantı öznitelikleri:

    • 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 Sürüm 17.2'den önce.

  • SQL_C_INTERVAL_YEAR_TO_MONTH bölümünde belgelenen, gibi C aralık türleri.

  • SQL_ATTR_ODBC_CURSORS öğesinin SQLSetConnectAttr özniteliğinin SQL_CUR_USE_ODBC değeri.

Karakter verilerinin işlenmesi

Linux ve macOS'ta, yerel SQLWCHAR türü yerine ODBC geniş karakterli API'leriyle UTF-16 wchar_t tamponları kullanın. Sürücü arayüzü 16-bit kod birimleri kullanır.

Karakter kodlamaları

ODBC Sürücü 13 ve 13.1 için SQLCHAR verileri için UTF-8 kullanmalısınız. Bu sürümler başka hiçbir kodlamayı desteklemiyor.

ODBC Sürücü 17'den itibaren desteklenen karakter setleri ve veri kodlamaları SQLCHAR şunlardır:

Uyarı

musl ve iconv arasındaki glibc farklar nedeniyle, bu bölgelerin çoğu Alpine Linux'ta desteklenmiyor. Daha fazla bilgi için bkz. glibc ile işlevsel farklılıklar.

İsim Description
UTF-8 Unicode
CP437 MS-DOS Latin ABD
CP850 MS-DOS Latince 1
CP874 Latin/Tay dili
CP932 Japonca (Windows kod sayfası 932)
CP936 Basitleştirilmiş Çince, GBK
CP949 Korece (Windows kod sayfası 949)
CP950 Geleneksel Çince, Big5
CP1250 Orta Avrupa
CP1251 Kiril
CP1252 Batı Avrupa
CP1253 Yunanca
CP1254 Türkçe
CP1255 İbranice
CP1256 Arapça
CP1257 Baltık
CP1258 Vietnamca
ISO-8859-1 Latin-1
ISO-8859-2 Latin-2
ISO-8859-3 Latin-3
ISO-8859-4 Latin-4
ISO-8859-5 Latin/Kiril
ISO-8859-6 Latin/Arapça
ISO-8859-7 Latin/Yunanca
ISO-8859-8 İbranice
ISO-8859-9 Türkçe
ISO-8859-13 Latin-7
ISO-8859-15 Latin-9

Bağlandığınızda, sürücü yüklendiği sürecin mevcut yerel ayarını algılar. Yerel ayar listelenen kodlamalardan birini kullanıyorsa, sürücü SQLCHAR (dar karakterli) verileri için o kodlamayı kullanır. Aksi takdirde, varsayılan olarak UTF-8 olur. İşlemler varsayılan olarak C yerel ayarında başlar, bu da sürücünün varsayılan olarak UTF-8 kullanmasına neden olur. Bir uygulamanın listelenen kodlamalardan birine ihtiyacı varsa, bağlanmadan önce setlocale çağrısını yapın. Yerel konumu açıkça belirtin veya ortamın yerel ayarlarını kullanmak için boş bir dize (örneğin, setlocale(LC_ALL, "")) kullanın.

Kodlamanın UTF-8 olduğu tipik bir Linux veya macOS ortamında, 13 veya 13.1'den ODBC Driver 17'ye yükselten kullanıcılar fark görmezler. Listelenen UTF-8 dışı bir kodlama setlocale kullanan uygulamalar, sürücüye giden ve gelen veriler için UTF-8 yerine bu kodlamayı kullanmak zorundadır.

Veri için SQLWCHAR UTF-16LE (küçük endian) kullanmalısınız.

Giriş parametrelerini SQLBindParameter kullanarak bağladığınızda, dar bir karakter SQL türü, örneğin SQL_VARCHAR, belirtirseniz, sürücü sağlanan veriyi istemci kodlamasından o parametre için sunucu tarafı kodlamasına dönüştürür. Kodlama karşılaştırma düzenine bağlıdır; her zaman kod sayfası 1252 değildir. Çıkış parametreleri için sürücü, verilerle ilişkili harmanlama bilgilerinde belirtilen kodlamadan istemci kodlamasına dönüştürür. Hedef kodlamada temsil edilemeyen kaynak kodlamadaki karakterler soru işaretine (?). dönüştürülür.

Giriş parametreleri bağlanırken bu veri kaybını önlemek için, örneğin SQL_WVARCHARbir Unicode SQL karakter türü belirtin. Sürücü, istemci kodlamasını UTF-16'ya dönüştürür ve bu da tüm Unicode karakterlerini temsil edebilir. Hedef sütun veya parametre ayrıca Unicode tipi (nchar, nvarchar veya ntext) veya tüm orijinal kaynak verilerini temsil edebilen bir harmanlama ya da kodlama içeren bir tür olmalıdır. Çıkış parametreleri için, bir Unicode SQL tipi ve şu seçeneklerden birini belirtin: sürücünün veriyi UTF-16 olarak döndürmesine neden olan bir Unicode C tipi (SQL_C_WCHAR) veya kaynak veriyi temsil edebilen istemci kodlamasına sahip dar bir C tipi. UTF-8 her zaman bu veriyi temsil edebilir.

Karşılaştırmalar ve kodlamalar hakkında daha fazla bilgi için Collation and Unicode support sayfasına bakınız.

Windows ile Linux veya macOS iconv sürümleri arasında dönüşüm farklılıkları vardır:

  • Kod sayfası 1255 için, 0xCA baytı Windows'ta 0x00CA UTF-16 kod noktasına, macOS ve Linux'ta ise 0x05BA'ün 1.15'ten önceki sürümlerinde libiconv UTF-16 kod noktasına dönüştürülür.
  • 2003 tarihli Big5/CP950 revizyonu olmayan Linux BIG5-2003 kütüphaneleri, o revizyonda eklenen karakterleri (iconv) doğru şekilde dönüştürmez.
  • Kod sayfası 932 (Japonca, Shift-JIS) için, kodlama standardında tanımlanmayan karakterlerin çözülmesi farklılık gösterir. Örneğin, bayt 0x80 Windows'ta U+0080'e dönüştürülür ve Linux ile macOS'ta iconv sürüme bağlı olarak U+30FB’ye dönüşebilir.

ODBC Sürücü 13 ve 13.1'de, UTF-8 çok baytlı karakterler veya UTF-16 surrogate çiftlerini tamponlar SQLPutData arasında bölmek veri bozulmasına yol açar. Kısmi karakter kodlamalarıyla bitmeyen akış tamponları kullanın. Bu sınırlama ODBC Sürücü 17'de kaldırılmıştır.

Karakter kodlama, dönüştürme, parametre bağlama ve tampon boyutlandırma için Bilinen sorunlar bölümüne bakın.

OpenSSL

ODBC Sürücü 17.4'ten itibaren sürücü OpenSSL'i dinamik olarak yükler; bu da ayrı sürücü dosyaları olmadan 1.0 veya 1.1 sürümlü sistemlerde çalışmasını sağlar. Sürüm 17.9'dan başlayarak sürücü, önceki sürümlere ek olarak OpenSSL 3.0'ı da destekler. OpenSSL'in birden fazla sürümü bulunduğunda, sürücü kütüphane arama yollarından desteklenen bir sürümü yüklemeye çalışır.

Sürücü sürümü Desteklenen OpenSSL sürümleri
17.4'ten 17.8'e kadar 1.0, 1.1
17.9 ve sonraki 17.x sürümleri ile tüm Driver 18 sürümleri 1.0, 1.1, 3.0

OpenSSL 4 desteklenmiyor. macOS'ta, OpenSSL 4'e işaret eden bir Homebrew openssl bağlantısı, OpenSSL 3 yüklü olsa bile sürücünün OpenSSL’yi yüklemesini engelleyebilir. Kütüphane yolunu ve yüklü sürümleri kontrol edin.

Uyarı

Sürücüyü veya bileşenlerinden birini kullanan uygulama, OpenSSL'in farklı bir sürümüne bağlanır veya dinamik olarak yüklerse potansiyel bir çakışma meydana gelebilir. Sistemde birkaç OpenSSL sürümü varsa ve uygulama bunu kullanıyorsa, uygulamanın yüklediği sürüm ile sürücünün uyuştuğundan emin olun. Hatalar belleği bozabilir ve bariz ya da tutarlı şekillerde ortaya çıkmayabilir.

Alpine Linux

musl içindeki yeni iş parçacıkları için varsayılan yığın boyutu, yürütülebilir dosya daha büyük bir varsayılan istemedikçe 128 KB'dır. Bir iş parçacığı, sürücüyü çağırdığında bu sınırı aşabilir. Alpine Linux'ta bir ODBC uygulamasını, daha büyük bir varsayılan iş parçacığı yığını istemek için -Wl,-z,stack-size=<size_in_bytes> ile bağlayın. Açık bir stack boyutuna sahip iş parçacığı oluşturan uygulamalar da bu iş parçacıkları için yeterli bir boyut seçmelidir.

Ana iş parçacığı yığını ile yeni iş parçacıkları için varsayılan yığın aynı ayar değil. glibc sistemlerde, yeni iş parçacıkları için varsayılan değer genellikle sürecin yığın kaynak sınırını takip eder, ancak bu sınır sınırsız olduğunda mimariye özgü bir yedek yöntem vardır. Linux sistemlerinde sabit 2 MB varsayılanı olduğunu varsaymayın.

Ek notlar

Bir ODBC uygulamasından özel bir yönetici bağlantısı (DAC) oluşturmak için bağlantı dizesi içinde Server=tcp:<server>,<dac_port> değerini ayarlayın. Keşfedilen DAC bağlantı noktasını kullanın, örneğin normal bağlantı noktasını değil. Örneğin, DAC portu 33000 ise, Server=tcp:<server>,33000 olarak ayarlayın. Bu bağlantı dizisi parçaları yalnızca uç noktayı belirtir, kimlik doğrulamayı değil. Kimlik doğrulama ve sunucu-sertifika doğrulamasını ayrı ayrı yapılandırın.

Oturum açma hesabı, sysadmin sunucu rolünün bir üyesi olmalıdır. Uzaktan erişim için sunucunun uzaktan yönetici bağlantıları seçeneğinin etkinleştirilmiş olması gerekir. Erişim gereksinimleri, sunucu yapılandırması ve komut satırı yönetimi prosedürleri için veritabanı yöneticileri için tanı bağlantısı bölümünü inceleyebilirsiniz. Port keşfi için DAC portuna bakın.

unixODBC sürücü yöneticisi, deyim özniteliklerini SQLSetConnectAttr aracılığıyla Windows Sürücü Yöneticisi ile aynı şekilde işler. ODBC 2.x deyim seçenekleri, örneğin SQL_ATTR_QUERY_TIMEOUT ve SQL_ATTR_MAX_ROWS, bağlantıdaki mevcut ve yeni deyimler için geçerlidir. ODBC 3.x yalnızca deyime özgü öznitelikler, örneğin SQL_ATTR_ROW_ARRAY_SIZE ve SQL_ATTR_PARAMSET_SIZE, SQLSTATE HY092'yi geri getirir. Hem bağlantı hem de ifade seviyelerinde tanımlanan öznitelikler, örneğin SQL_ATTR_METADATA_ID, her iki seviyede de de ayarlanabilir. Bağlantı seviyesinde yalnızca deyime özgü öznitelikler ayarlamak ODBC 3.x'te kullanımdan kaldırılmıştır, bu yüzden bunun yerine SQLSetStmtAttr çağırın. Daha fazla bilgi için SQLSetConnectAttr fonksiyonuna bakınız.

Çok fazla iş parçacıklı uygulamalarda, unixODBC handle doğrulaması performans darboğazı haline gelebilir. unixODBC’yi --enable-fastvalidate ile derlemek performansı artırabilir. Ancak bu seçenek, geçersiz tutamaçları ODBC API'lerine gönderen uygulamaların SQL_INVALID_HANDLE döndürmek yerine çökmesine neden olabilir.

Platform kurulumu ve yapılandırma adımları için bkz: