Istemci kod sayfası sunucu kod sayfasından farklıysa, SQL Server ODBC sürücüsü kullanarak doğru karakter verilerinin bir istemciden sunucuya çeviremiyor

Makale çevirileri Makale çevirileri
Makale numarası: 234748 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Belirtiler

MDAC 2.1 veya sonraki bir sürümü SQL Server ODBC sürücüsünün (<a1>Sürüm</a1> 3.70.0623 veya sonraki sürümü) veya OLEDB Sağlayıcısı (<a1>Sürüm</a1> 7.01.0623 veya daha yenisi), Autotranslation bağlantı için bile devre dışı bırakıldığında bazı durumlarda Sunucu kod sayfası istemci kod sayfası karakter veri çevirisi karşılaşabilirsiniz.

Neden

Kod sayfası dönüştürme neden yalnızca bir mekanizma Autotranslation değil. OLEDB Sağlayıcısı ve SQL Server 7.0 ODBC sürücüsü yeni davranış, MSDE 1.0, SQL Server 7.0 veya ya da daha yeni sürümlerini bağlanırken sunar. Bir dil olayı olarak gönderilen tüm SQL deyimlerini sunucuya gönderilmeden önce istemci üzerinde Unicode'a dönüştürülür. Bu son etkin bir bağlantı için geçerli Autotranslation ayarı ne olursa olsun, bir dil olay aracılığıyla sunucuya istemciden akan tüm verilerin Autotranslation benzer. Bu SQL Server'ın kod sayfası dışında bir kod sayfası olmayan çevrilmiş bir karakter veri depolamak, çalıştığınız dışındaki tüm sorunlar tanıtılacaktır değil.

Pratik Çözüm

Kod sayfası X veri E SQL Server'ı (örneğin, kod sayfası 950 verilerde bir kod sayfası 1252 sunucu) bir <a0>kod sayfası depolamayın. Her zaman bu SQL Server'ın önceki sürümlerinde, bazı durumlarda olası doğrulanırken, desteklenmeyen olmuştur. 1252 SQL Server'a, ancak dışında bir 1252 karakteri geçerli bir karakter veri değildir. Unicode olmayan karakter verileri farklı bir kod sayfası doğru sıralanacağı olmayan ve çift baytlık (DBCS) veri durumunda, SQL Server karakter sınırlar doğru tanımayacaktır. Bu, önemli sorunlar (örneğin, Microsoft Bilgi Bankası'ndaki aşağıdaki makalede açıklanan sorun neden olabilir:
155723BILGI: SQL Server kesme DBCS dize
SQL Server'ın kod sayfası için en iyi seçim sunucuya erişen istemcilere kod sayfasıdır.

Istemci ve sunucu farklı kod sayfaları olabilir, ancak tüm durumlarda doğru çeviri için ve sunucu çubuğundaki kod sayfasından veri almak için istemcide Autotranslation etkinleştirildiğinden emin olmanız gerekir.

Sunucunuzun birden çok kod sayfası verileri depolarsanız, bu gerekir desteklenen (NCHAR/DEPARTMENTNAME/NTEXT) Unicode sütunlardaki verileri depolamak için çözümüdür.

Durumunuza bir kod sayfasında E SQL Server kod sayfası X veri depolamanız gerekiyorsa, bunu güvenilir yapmak için yalnızca iki yolu vardır:
  • Verilerin ikili sütunu (BıNARY/VARBıNARY/RESIM) sütunlarda depolar.
  • Karakter verileri ile ilgili tüm SQL deyimleri için uzak yordam çağrıları (RPC) kullanmak için uygulamanızı yazın. Bir RPC olayı gönderilen verileri bu dönüştürmeyi tabi değildir. Orada hiçbir sürücü veya gönderilmekte olan olayların türünü değiştirmek için yapabileceğiniz bir DSN düzeyi unutmayın. Bir komut dili veya RPC olayı gönderilen tamamen Apı ve/veya uygulama yazıldığında Programcı tarafından seçilen sözdizimi bağlıdır.

Daha fazla bilgi

Autotranslation onay (yani, “ karakter veri çevirisi gerçekleştir"kutularını daha yeni bir ODBC uygulamalarda) karakter verileri istemci kod sayfasından sunucusu kod sayfası verileri sunucuya göndermeden önce bir çeviri Orta Unicode kullanarak dönüştürür. Ancak, 3.7 SQL Server ODBC sürücüsü de bunları Autotranslation için benzer, ancak Autotranslation ayarı tarafından yönetilmeyen bir etkisi ağ üzerinde yerleştirmeden önce Unicode için bir dil olayı olarak gönderilen tüm SQL deyimlerini dönüştürür. Buna ek olarak, sunucu üzerinde sahip olduğu verileri olarak sırasında istemci uygulaması ile aynı karakter veri Autotranslation devre dışı veri etkinleştirdiyseniz, sunucudan yeniden istemcilerinin saygı için Autotranslation bayrağı; akan ulaşan karakter kodları. Benzer şekilde, istemci ve sunucu RPC olayları için veri çevirisi Autotranslation devre dışı bırakarak devreden çıkarılabilir. Bu davranış, dil olayları nasıl etkilediğini gösteren basit bir komut dosyası aşağıdaki gibidir. Bu örnek kod sayfası 1252 kod sayfası 437 sunucuya bağlanan istemci üzerinde Sorgu Çözümleyicisi ' çalıştırıldı:
-- Turn Autotranslation off here.
    USE tempdb
    GO
    CREATE TABLE t1 (c1 int, c2 char(1))
    GO
    
    -- Enter a yen character, using the keystroke ALT-0165.
    INSERT INTO t1 VALUES (1, '¥') 
    SELECT c1, c2, ASCII (c2) FROM t1
c1          c2               
        ----------- ---- ----------- 
        1               157
        
        (1 row(s) affected)
Önceki örnekte hakkında aşağıdakilere dikkat edin:
  • Bu toplu işlem sırasında Autotranslation devre dışı olduğu halde 165 (yen, kod sayfası 1252) karakter kodu için 157 (kod sayfası 437 yen) dönüştürüldü. Bunun nedeni, ODBC sürücüsü göndermeden önce SQL dizesi Unicode'a dönüştürülen sunucu; bu nedenle, sunucu uygun kod sayfası 437 depolamada karakterini dönüştürmek açtı.
  • Istemci yalnızca depolanmış verileri almak amacıyla bir SELECT çalıştırdığınızda 157 karakter olmayan çevrilmiş (157 gösterir kadar bir kod sayfası 1252 istemcisindeki kutusu "" olarak) istemcide gelen. Bu makalede açıklanan dönüştürme yalnızca istemciden sunucuya, değil istemcinin sunucudan gönderilen verileri geçerli olmasıdır. Autotranslation ayarı kapalı olduğundan veriler çevrilmiş değil.

-- Turn Autotranslation back on before running the following batch.
    INSERT INTO t1 VALUES (2, '¥')
    SELECT c1, c2, ASCII (c2) FROM t1
c1          c2               
        ----------- ---- ----------- 
        1           ¥    157
        2           ¥    157
        
        (2 row(s) affected)
Bu durumda, Autotranslation yeniden açma istemciden sunucuya çevirisini üzerinde hiçbir etkisi olduğu (diğer bir deyişle 157 karakter kodu için aynı doğru çeviriyi 165 karakter kodundan oldu), ancak bu sunucudan alınan veriler üzerinde bir etkisi sahip. SELECT deyimi ile (Autotranslation üzerinde) şu çalıştırıldığında, karakter kodunu 157 karakter kodunu 165 Autotranslation mekanizması tarafından çevrilen olduğundan yen simgeleri doğru kod sayfası 1252 uygulamada görüntülemesini unutmayın.

Bu davranış (dönüştürme dil olayların Unicode istemcideki) ne zaman görürsünüz tüm SQL Server ODBC sürücüsü 3.70 veya daha sonra ve bağlanırken SQL Server 7.0 veya sonraki bir sürümü kullanarak. Eski ODBC sürücülerini kullanarak veya SQL Server 6.5 veya önceki bağlanmaya 3.7 sürücüsü kullanıldığında oluşmaz. Verilerinizi Unicode sütunlarda depolamak, buna ek olarak, (NCHAR/DEPARTMENTNAME/NTEXT) dönüştürme sorunu olur.
Karakter verileri SQL Server 2005'te nasıl temsil hakkında daha fazla bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
904803SQL Server 2005 veritabanının kod sayfasında kod sayfası istemci bilgisayarın farklıdır, karakter verilerinin hatalı gösterilir

Özellikler

Makale numarası: 234748 - Last Review: 22 Şubat 2007 Perşembe - Gözden geçirme: 4.3
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft Open Database Connectivity 3.7
  • Microsoft Data Engine 1.0
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL 2005 Server Enterprise
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL 2005 Server Workgroup
Anahtar Kelimeler: 
kbmt kbprb KB234748 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:234748

Geri Bildirim Ver

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com