Anda tidak dapat dengan benar menerjemahkan data karakter dari klien ke server dengan menggunakan pengandar SQL Server ODBC jika klien kode halaman berbeda dari halaman kode server

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 234748 - Melihat produk di mana artikel ini berlaku.
Perbesar semua | Perkecil semua

GEJALA

Ketika menggunakan MDAC 2.1 atau versi pengandar SQL Server ODBC (versi 3.70.0623 atau yang lebih baru) atau penyedia OLEDB (versi 7.01.0623 atau yang lebih baru), dalam beberapa keadaan Anda mungkin mengalami terjemahan karakter data dari halaman kode klien ke server kode halaman, bahkan ketika Autotranslation dinonaktifkan untuk sambungan.

PENYEBAB

Autotranslation bukanlah satu-satunya mekanisme yang dapat menghasilkan kode halaman konversi. SQL Server 7.0 ODBC driver dan OLEDB penyedia memperkenalkan perilaku baru saat menghubungkan MSDE 1.0, SQL Server 7.0 atau versi yang lebih tinggi baik. Semua pernyataan SQL yang dikirimkan sebagai peristiwa bahasa yang dikonversi ke Unicode pada klien sebelum dikirim ke server. Efek akhir ini sangat mirip dengan Autotranslation dari semua data yang mengalir dari klien ke server melalui acara bahasa, terlepas dari current pengaturan Autotranslation untuk sambungan. Ini tidak akan memperkenalkan kesulitan kecuali ketika mencoba untuk menyimpan data diterjemahkan non-karakter dari kode halaman selain halaman kode SQL Server.

TEKNIK PEMECAHAN MASALAH

Jangan menyimpan data x kode halaman di halaman kode Y SQL Server (misalnya, kode halaman 950 data dalam kode halaman 1252 server). Sementara ini mungkin dalam beberapa keadaan dengan versi sebelumnya dari SQL Server, itu selalu tidak didukung. Sage 1252, apa pun kecuali 1252 karakter adalah tidak sah karakter data. Non-Unicode karakter data dari halaman berbeda kode tidak akan diurutkan dengan benar, dan dari dual-byte data (DBCS), SQL Server tidak akan mengenali batas-batas karakter dengan benar. Hal ini dapat menyebabkan masalah signifikan, seperti masalah yang dijelaskan dalam artikel berikut pada Basis Pengetahuan Microsoft:
155723 INF: SQL Server pemotongan tali DBCS
Pilihan terbaik untuk SQL Server kode halaman adalah halaman kode klien yang akan mengakses server.

Server dan klien dapat memiliki halaman kode yang berbeda, tapi Anda harus memastikan bahwa Autotranslation diaktifkan pada klien sehingga Anda mendapatkan terjemahan tepat data ke dan dari server halaman kode dalam semua kasus.

Jika server Anda harus menyimpan data dari beberapa kode halaman, solusi yang didukung adalah untuk menyimpan data dalam Unicode kolom (NCHAR/NVARCHAR/NTEXT).

Jika situasi Anda mengharuskan Anda untuk menyimpan halaman x kode dalam halaman kode Y SQL Server, ada dua cara untuk melakukan hal ini dapat dipercaya:
  • Menyimpan data dalam kolom kolom biner (BINARY/VARBINARY/gambar).
  • Menulis aplikasi Anda untuk menggunakan Remote Procedure Calls (RPCs) untuk semua pernyataan SQL yang berhubungan dengan karakter data. Data dikirim melalui RPC acara ini tidak tunduk pada konversi ini. Perhatikan bahwa tidak ada pada driver atau DSN tingkat yang dapat Anda lakukan untuk mengubah jenis peristiwa yang sedang dikirim. Apakah perintah yang dikirim sebagai bahasa atau acara RPC tergantung sepenuhnya pada api dan sintaks yang dipilih oleh para programmer ketika aplikasi ditulis.

INFORMASI LEBIH LANJUT

Autotranslation (, "Menjalankan terjemahan untuk karakter data" centang di baru ODBC aplikasi) mengkonversi karakter data dari klien kode halaman untuk halaman kode server sebelum mengirim data ke server, menggunakan Unicode sebagai media terjemahan. Namun, pengandar SQL Server ODBC 3,7 juga mengkonversi semua pernyataan SQL yang dikirimkan sebagai peristiwa bahasa untuk Unicode sebelum menempatkan mereka pada kabel, yang memiliki efek yang mirip dengan Autotranslation tapi tidak diatur oleh pengaturan Autotranslation. Sebaliknya, karakter data mengalir dari server kembali ke klien menghormati bendera Autotranslation; Jika Autotranslation dimatikan data tiba di klien aplikasi dengan kode karakter yang sama sebagai data telah di server. Demikian pula, terjemahan dari data untuk klien-server RPC peristiwa dapat dinonaktifkan dengan mematikan Autotranslation. Script sederhana yang menunjukkan bagaimana perilaku ini mempengaruhi bahasa peristiwa berikut. Contoh ini berjalan dari Query Analyzer pada klien 1252 halaman kode yang menghubungkan ke server 437 halaman kode:
-- 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)
Catatan berikut tentang contoh sebelumnya:
  • Meskipun Autotranslation adalah off selama ini batch, kode karakter 165 (yen dalam kode halaman 1252) dikonversi ke 157 (yen dalam kode halaman 437). Hal ini karena pengandar ODBC menjadi SQL string Unicode sebelum mengirimnya server, sehingga server mampu mengkonversi ke karakter sesuai untuk penyimpanan dalam kode halaman 437.
  • Ketika klien berlari SELECT untuk mengambil data yang hanya disimpan, karakter 157 tiba diterjemahkan non-klien (157 muncul sebagai sebuah kotak "" pada kode halaman 1252 klien). Hal ini karena konversi yang dibahas dalam artikel ini hanya berlaku untuk data yang dikirim dari klien ke server, bukan dari server untuk klien. Data tidak diterjemahkan karena pengaturan Autotranslation dimatikan.

-- 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)
Dalam kasus ini, menyalakan Autotranslation kembali tidak punya efek pada terjemahan dari klien ke server (yaitu terjemahan benar sama dari kode karakter 165 ke kode karakter 157 terjadi), tapi itu memiliki efek pada data yang Diperoleh dari server. Perhatikan bahwa ketika SELECT pernyataan dijalankan saat ini (dengan Autotranslation pada), yen simbol tampil dengan benar dalam kode halaman 1252 aplikasi karena mereka telah diterjemahkan dari kode karakter 157 kembali ke kode karakter 165 oleh mekanisme Autotranslation.

Anda akan melihat perilaku ini (konversi bahasa peristiwa untuk Unicode pada klien) ketika menggunakan setiap SQL Server ODBC driver versi 3.70 atau kemudian dan menghubungkan ke SQL Server 7.0 atau yang lebih baru. Itu tidak akan terjadi ketika menggunakan ODBC pengandar yang lama, atau ketika menggunakan driver 3,7 untuk menghubungkan ke SQL Server 6,5 atau sebelumnya. Selain itu, jika Anda menyimpan data dalam kolom Unicode (NCHAR/NVARCHAR/NTEXT) konversi tidak akan menjadi masalah.
Untuk informasi lebih lanjut tentang bagaimana karakter data diwakili dalam SQL Server 2005, klik nomor artikel di bawah ini untuk melihat artikel di dalam Basis Pengetahuan Microsoft:
904803Karakter data diwakili salah ketika halaman kode komputer klien yang berbeda dari halaman kode database SQL Server 2005

Properti

ID Artikel: 234748 - Kajian Terakhir: 20 September 2011 - Revisi: 2.0
Berlaku bagi:
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Workgroup Edition
Kata kunci: 
kbprb kbmt KB234748 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:234748

Berikan Masukan

 

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