共用方式為


管理 Unicode 伺服器與非 Unicode 用戶端之間的資料轉換

本主提描述當伺服器端的資料以 Unicode 儲存時,如何保留字元資料的完整性,但是與資料互動的用戶端應用程式是使用特定的字碼頁。

資料輸入

當從用戶端傳送的非 Unicode 資料要在伺服器上以 Unicode 儲存時,如果下列任一條件為真,從用戶端而來的資料不論是使用哪一種字碼頁,都可以正確地儲存:

  • 字元字串將以遠端程序呼叫 (RPC) 的參數傳送至伺服器。

  • 字串常數前面會加上大寫字母 N。無論用戶端應用程式是否為 Unicode 感知,都將需要它。若沒有 N 前置詞,SQL Server 會將字串轉換成對應至資料庫預設定序的字碼頁。在此字碼頁中找不到的任何字元將會遺失。

資料擷取

如果用戶端應用程式未啟用 Unicode,並將資料擷取至非 Unicode 緩衝區,用戶端將只能擷取或修改用戶端機器字頁碼所能代表的資料。這意謂著可以永遠擷取 ASCII 字元,因為 ASCII 字元的代表與所有的字碼頁相同,然而任何非 ASCII 資料則是取決於字碼頁之間的轉換而定。

例如,假設應用程式目前只在美國 (U.S.) 執行,但是在日本部署。因為 SQL Server 資料庫是 Unicode 感知,所以英文和日文文字可以儲存在相同的資料表中,即使應用程式尚未修改成以 Unicode 處理文字也是一樣。只要應用程式符合上述兩個選項的其中之一,日文使用者可以使用非 Unicode 應用程式來輸入和擷取日文資料,而美國使用者可以輸入和擷取英文資料。兩組使用者的所有資料都會完整地儲存在資料庫的相同資料行中,並以 Unicode 代表。在此情況下,就可以部署啟用 Unicode 的報告應用程式,以產生可跨越完整資料集的報告。不過,英文使用者將無法檢視日文資料列,因為應用程式無法顯示其字碼頁 (1252) 中不存在的任何字元。

如果這兩個群組的使用者不需檢視彼此的記錄,這樣的情況就是可以接受的。如果應用程式使用者必須可以檢視或修改單一字碼頁無法代表的文字記錄,除了將應用程式修改成可以使用 Unicode,別無它法。

以 Web 為基礎的應用程式

如果用戶端程式是以 Web 為基礎或連接到 Active Server Pages (ASP) 網頁,則在用戶端 HTML 網頁和伺服器端 ASP 網頁上,都會有中繼資料規格。必須制定這些規格以指定如何在伺服器、ASP 引擎以及用戶端瀏覽器之間轉換字元字串。

在用戶端的 HTML 網頁上,META 屬性必須指定使用 CHARSET 字碼將字元集資料轉換為用戶端的編碼配置。例如,下列 HTML 網頁將 big5 指定為 CHARSET 字碼,以指示用戶端將字元資料轉換為 950 (繁體中文) 字碼頁。若要查看 META 屬性的字元集字碼,請造訪 Microsoft 網站

<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=big5">
<!-- 
     
-->
</HEAD>
<BODY>
<!--
   body
-->
</BODY>
</HTML>

在伺服器端 ASP 網頁上,您必須指示 ASP Web 應用程式關於用戶端瀏覽器所使用的字碼頁。您可以指定 Session.CodePage 屬性,或是 @CodePage 指示詞。這些方法將處理將伺服器資料轉換至用戶端的問題,以及 GET 與 POST 用戶端要求。在下列範例中,這兩個方法都用以指定用戶端字碼頁之間的轉換,即 950 (繁體中文)。

<%@ Language=VBScript codepage=950 %>
<%  Session.CodePage=950 %>

最後,您必須記得在任何字串常值前面放置字母 N。