2010-11-16 252 views
2

我們開發了一個網站,需要以英文,波蘭文,斯洛伐克文和捷克文顯示文本。但是,當文本輸入數據庫時​​,任何重音字母都會更改爲英文字母。多語言支持

在論壇上搜索後,我發現可以在包含重音字符的字符串前加'N'。例如:

INSERT INTO Table_Name (Col1, Col2) VALUES (N'Value1', N'Value2') 

不過,該網站已經得到充分發展所以在這個階段,經歷的所有站點中的INSERT和UPDATE查詢將是一個非常漫長而乏味的過程。

我想知道是否有其他更快的方法來做我想做的事情?

數據庫是MSSQL,插入的列已經是nvarchar(n)。

+1

如何做你訪問數據庫? (什麼類型的客戶端?) – Stu 2010-11-16 16:15:55

+1

什麼是列定義?您是使用NVARCHAR類型而不是VARCHAR嗎? – Oded 2010-11-16 16:16:55

+0

@Stu對不起,我不確定你在問什麼。這個網站是一個.NET網站,如果這就是你的意思? – Leah 2010-11-16 17:28:42

回答

1

沒有任何快速解決方案。

更新和插入錯誤,需要修復。

如果他們是參數化查詢,您可以簡單地確保他們使用的是NVarChar數據庫類型,並且不會有問題。

由於它們是動態字符串,因此您需要確保在要插入/更新的每個文本字段前加上unicode說明符(N)。

+0

非常感謝您的幫助。我試圖將我的內聯SQL語句之一更改爲帶參數的存儲過程,並且我可以確認使用參數確實保留了重音。看起來我前面有一件冗長乏味的工作.... – Leah 2010-11-17 10:47:52

0

主題起動寫道:

「在英語,波蘭語,斯洛伐克語和捷克文字然而,當輸入到數據庫中的文本,任何重音字母更改爲英文字母」摸索後論壇上,我發現可以在包含重音字符的字符串前加'N'。例如:

INSERT INTO Table_Name (Col1, Col2) VALUES (N'Value1', N'Value2') 

「數據庫作爲一個整體的排序規則是Latin1_General_CI_AS」

我看不出它和可能是由於SQL服務器,因爲Latin1_General_CI_AS對待歐洲「非 - 英語」字母:

--on database with collation Latin1_General_CI_AS 
declare @test_multilanguage_eu table 
(
    c1 char(12), 
    c2 nchar(12) 
) 

INSERT INTO @test_multilanguage_eu VALUES ('éÉâÂàÀëËçæà', 'éÉâÂàÀëËçæà') 

SELECT c1, cast(c1 as binary(4)) as c1bin, c2, cast(c2 as binary(4)) as c2bin 
FROM @test_multilanguage_eu 

輸出:

c1   c1bin  c2   c2bin 
------------ ---------- ------------ ---------- 
éÉâÂàÀëËçæà 0xE9C9E2C2 éÉâÂàÀëËçæà 0xE900C900 

(1行(S)的影響)

我相信你只是要檢查他們的複選框控制面板 - >區域和語言選項 - >高級選項卡 - >代碼頁轉換表,並檢查您在存儲它時使用相同的代碼頁進行渲染。
從客戶端使用的編碼轉換爲unicode會導致回到webclients的問題,在我看來。

我相信大多數歐洲的排序規則指示符使用代碼頁1252 [1],[2]。

更新:
SELECT COLLATIONPROPERTY( 'Latin1_General_CI_AS', '代碼頁') 輸出1252

[1]
http://msdn.microsoft.com/en-us/library/ms174596.aspx
[2]
視窗1252
http://msdn.microsoft.com/en-us/goglobal/cc305145.aspx