Aracılığıyla paylaş


Programlama Yönergeleri

ODBC sürücüsü indirme

macOS ve Linux üzerinde SQL Server için Microsoft ODBC Sürücüsünün programlama özellikleri, SQL Server Yerel İstemcisi'nde (SQL Server Yerel İstemcisi (ODBC)) ODBC'yi temel alır. SQL Server Yerel İstemcisi, Windows Veri Erişim Bileşenlerinde ODBC'ye dayanır (ODBC Programcı Başvurusu).

ODBC uygulaması, unixODBC üst bilgilerini (sql.h, sqlext.h, sqltypes.h ve sqlucode.h) dahil ettikten sonra /usr/local/include/msodbcsql.h dahil ederek Birden Çok Etkin Sonuç Kümesi (MARS) ve diğer SQL Server'a özgü özellikleri kullanabilir. Ardından, Windows ODBC uygulamalarınızda kullanacağınız SQL Server'a özgü öğeler için aynı sembolik adları kullanın.

Kullanılabilir Özellikler

ODBC (SQL Server Yerel İstemcisi (ODBC)) için SQL Server Yerel İstemci belgelerindeki aşağıdaki bölümler, macOS ve Linux üzerinde ODBC sürücüsü kullanılırken geçerlidir:

Desteklenmeyen Özellikler

Aşağıdaki özelliklerin macOS ve Linux'taki ODBC sürücüsünde düzgün çalıştığı doğrulanmadı:

MacOS ve Linux'taki ODBC sürücüsünde aşağıdaki özellikler kullanılamaz:

  • Dağıtılmış İşlemler (SQL_ATTR_ENLIST_IN_DTC özniteliği desteklenmez)
  • Veritabanı Yansıtma
  • FILESTREAM
  • SQLSetConnectAttr'de açıklanan ODBC sürücüsü performansının profilini oluşturma ve performansla ilgili aşağıdaki 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 (17.2 sürümünden önce)
  • SQL_C_INTERVAL_YEAR_TO_MONTH gibi C aralığı türleri ( Veri Türü Tanımlayıcıları ve Tanımlayıcıları'nda belgelenmiştir)
  • SQLSetConnectAttr işlevinin SQL_ATTR_ODBC_CURSORS özniteliğinin SQL_CUR_USE_ODBC değeri.

Karakter Kümesi Desteği

ODBC Sürücüsü 13 ve 13.1 için SQLCHAR verileri UTF-8 olmalıdır. Başka kodlama desteklenmez.

ODBC Sürücüsü 17 için, aşağıdaki karakter kümelerinden/kodlamalardan birinde yer alan SQLCHAR verileri desteklenir:

Uyarı

iconv Ve bu yerel ayarların çoğu arasındaki muslglibc farklılıklar nedeniyle Alpine Linux'ta desteklenmez.

Daha fazla bilgi için bkz . Glibc'den işlevsel farklılıklar

İsim Description
UTF-8 Unicode
CP437 MS-DOS Latin ABD
CP850 MS-DOS Latin 1
CP874 Latin/Tay dili
CP932 Japonca, Shift-JIS
CP936 Basitleştirilmiş Çince, GBK
CP949 Korece, EUC-KR
CP950 Geleneksel Çince, Big5
CP1251 Kiril
CP1253 Yunanca
CP1256 Arapça
CP1257 Baltık
CP1258 Vietnamca
ISO-8859-1 / CP1252 Latin-1
ISO-8859-2 / CP1250 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 / CP1255 İbranice
ISO-8859-9 / CP1254 Türkçe
ISO-8859-13 Latin-7
ISO-8859-15 Latin-9

Bağlantının ardından sürücü, yüklendiği işlemin geçerli yerel ayarını algılar. Yukarıdaki kodlamalardan birini kullanıyorsa, sürücü SQLCHAR (dar karakterli) veriler için bu kodlamayı kullanır; aksi takdirde, varsayılan olarak UTF-8 olur. Tüm işlemler varsayılan olarak "C" yerel ayarında başladığından (ve sürücünün varsayılan olarak UTF-8'e neden olduğundan), bir uygulamanın yukarıdaki kodlamalardan birini kullanması gerekiyorsa, bağlanmadan önce yerel ayarı uygun şekilde ayarlamak için setlocale işlevini kullanmalıdır; yerel ayarı açıkça belirterek veya ortamın setlocale(LC_ALL, "") yerel ayar ayarlarını kullanmak için boş bir dize kullanarak.

Bu nedenle, kodlamanın UTF-8 olduğu tipik bir Linux veya macOS ortamında, 13 veya 13.1'den yükselten ODBC Sürücüsü 17 kullanıcıları herhangi bir fark görmez. Ancak, yukarıdaki listede setlocale() UTF-8 olmayan bir kodlama kullanan uygulamaların UTF-8 yerine sürücüye/sürücüden gelen veriler için bu kodlamayı kullanması gerekir.

SQLWCHAR verileri UTF-16LE (Little Endian) olmalıdır.

GIRIŞ parametrelerini SQLBindParameter ile bağlarken, SQL_VARCHAR gibi dar bir karakter SQL türü belirtilirse, sürücü sağlanan verileri istemci kodlamasından varsayılan (genellikle codepage 1252) SQL Server kodlamasına dönüştürür. Çıkış parametreleri için sürücü, verilerle ilişkili harmanlama bilgilerinde belirtilen kodlamadan istemci kodlamasına dönüştürür. Ancak, kaynak kodlamadaki karakterler hedef kodlamada temsil edilemezse soru işaretine ('?') dönüşeceğinden, veri kaybı mümkündür.

Giriş parametreleri bağlanırken bu veri kaybını önlemek için SQL_NVARCHAR gibi bir Unicode SQL karakter türü belirtin. Bu durumda, sürücü istemci kodlamasından UTF-16'ya dönüştürür ve bu da tüm Unicode karakterlerini temsil edebilir. Ayrıca, sunucudaki hedef sütun veya parametre de unicode türünde (nchar, nvarchar, ntext) veya özgün kaynak verilerin tüm karakterlerini temsil eden harmanlama/kodlamaya sahip bir sütun olmalıdır. Çıkış parametrelerinde veri kaybını önlemek için, bir Unicode SQL türü ve bir Unicode C türü (SQL_C_WCHAR) belirterek sürücünün verileri UTF-16 veya dar bir C türü olarak döndürmesine neden olun ve istemci kodlamasının kaynak verilerin tüm karakterlerini temsil ebildiğinden emin olun (bu gösterim UTF-8 ile her zaman mümkündür.)

Harmanlamalar ve kodlamalar hakkında daha fazla bilgi için bkz. Harmanlama ve Unicode Desteği.

Windows ile Linux ve macOS üzerindeki iconv kitaplığının çeşitli sürümleri arasında bazı kodlama dönüştürme farkları vardır. Kod sayfasındaki 1255 (İbranice) metin verilerinde Unicode'a dönüştürme işleminde farklı davranan bir kod noktası (0xCA) vardır. Windows'da bu karakter 0x05BA UTF-16 kod noktasına dönüştürülür. 1.15'ten önceki libiconv sürümlerine sahip macOS ve Linux'ta, bu, 0x00CA'ya dönüştürür. Big5/CP950'nin 2003 düzeltmesini desteklemeyen iconv kitaplıklarına sahip Linux'ta (adlı BIG5-2003), bu düzeltmeyle eklenen karakterler doğru şekilde dönüştürülmeyecek. Kod sayfası 932'de (Japonca, Shift-JIS), başlangıçta kodlama standardında tanımlanmamış karakterlerin kodunun çözülmesinin sonucu da farklılık gösterir. Örneğin, bayt 0x80 Windows'ta U+0080'e dönüştürülür, ancak iconv sürümüne bağlı olarak Linux ve macOS'ta U+30FB olabilir.

ODBC Sürücüsü 13 ve 13.1'de UTF-8 çok baytlı karakterler veya UTF-16 vekilleri SQLPutData arabellekleri arasında bölündüğünde veri bozulmasına neden olur. SQLPutData akışı için, kısmi karakter kodlamalarıyla bitmeyen arabellekleri kullanın. Bu sınırlama ODBC Sürücüsü 17 ile kaldırılmıştır.

OpenSSL

Sürüm 17.4'den başlayarak sürücü OpenSSL'yi dinamik olarak yükler ve bu da ayrı sürücü dosyalarına gerek kalmadan 1.0 veya 1.1 sürümüne sahip 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'nin birden çok sürümü mevcut olduğunda, sürücü en son sürümü yüklemeyi dener.

Sürücü sürümü Desteklenen OpenSSL sürümleri
17.4+ 1.0, 1.1
17.9, 18.0+ 1.0, 1.1, 3.0

Uyarı

Sürücüyü (veya bileşenlerinden birini) kullanan uygulama OpenSSL'nin farklı bir sürümüyle bağlantılıysa veya dinamik olarak yüklerse olası bir çakışma oluşabilir. Sistemde birkaç OpenSSL sürümü varsa ve uygulama bunu kullanıyorsa, hatalar belleği bozabileceğinden ve bu nedenle belirgin veya tutarlı bir şekilde ortaya çıkarılmayabileceği için uygulama ve sürücü tarafından yüklenen sürümün uyuşmazlık göstermediğinden emin olunması kesinlikle önerilir.

Alpine Linux

Bu yazma sırasında MUSL'deki varsayılan yığın boyutu 128K'dır ve bu, temel ODBC sürücüsü işlevselliği için yeterlidir, ancak uygulamanın ne yaptığına bağlı olarak, özellikle sürücüyü birden çok iş parçacığından çağırırken bu sınırı aşmak zor değildir. Yığın boyutunu artırmak için Alpine Linux'ta ODBC uygulaması -Wl,-z,stack-size=<VALUE IN BYTES> ile derlenmiş olması önerilir. Başvuru için, GLIBC sistemlerinin çoğunda varsayılan yığın boyutu 2 MB'tır.

Ek Notlar

  • SQL Server kimlik doğrulaması ve konak, bağlantı noktası kullanarak ayrılmış bir yönetici bağlantısı (DAC) oluşturabilirsiniz. Sysadmin rolünün bir üyesinin önce DAC bağlantı noktasını bulması gerekir. Nasıl yapılacağını öğrenmek için bkz. Veritabanı Yöneticileri için Tanılama Bağlantısı . Örneğin, DAC portu 33000 olduğunda, aşağıdaki şekilde sqlcmd ile bağlanabilirsiniz:

    sqlcmd -U <user> -P <pwd> -S <host>,33000
    

    Uyarı

    DAC bağlantıları SQL Server Kimlik Doğrulaması kullanmalıdır.

  • UnixODBC sürücü yöneticisi, SQLSetConnectAttr aracılığıyla geçirildiğinde tüm deyim öznitelikleri için "geçersiz öznitelik/seçenek tanımlayıcısı" döndürür. Windows'da SQLSetConnectAttr bir deyim özniteliği değeri aldığında, sürücünün bağlantı tanıtıcısının alt öğeleri olan tüm etkin deyimlerde bu değeri ayarlamasına neden olur.

  • Sürücüyü çok iş parçacıklı uygulamalarla kullanırken unixODBC'nin tanıtıcı doğrulaması performans sorununa neden olabilir. Bu tür senaryolarda, unixODBC seçeneğiyle --enable-fastvalidate derlenerek daha yüksek performans elde edilebilir. Ancak, bu seçeneğin, ODBC API'lerine geçersiz tanıtıcılar ileten uygulamalar için hata döndürmek yerine kilitlenmelere yol açabileceğini dikkate alın.

Ayrıca Bkz.

Sık Sorulan Sorular
Bu Sürücünün Bu Sürümündeki Bilinen Sorunlar
Sürüm Notları