2010-09-15 46 views
0

我的頁面中增加了utf-8元元素+ sql服務器編碼也是utf。但是,當我創建記錄並嘗試發出SELECT語句,並且條件包含像'ń'這樣的POLISH字符時,我看不到任何結果。任何想法我錯過了什麼?SQL Server&ASP .NET編碼問題

也支持SQL Management Studio中顯示了與波蘭的字符導致的,但我不相信它....我猜東西是錯誤的將記錄到數據庫中......

或者我該怎麼解決呢?

謝謝你,帕維爾

+1

什麼是表的定義是什麼?你的查詢是什麼樣的? – 2010-09-15 15:14:20

+0

嗨,這是簡單的查詢,如:SELECT * FROM用戶其中username = 'PWaszczyński'。列UserName的類型是nvarchar(50),沒什麼特別的。正如我所說的:發出查詢:SELECT * FROM用戶其中username LIKE「PWaszczy%」將返回該行,但是當我將其更改爲「PWaszczyń%」失敗。同時發出SELECT * FROM Users將在SQL Management Studio中以'ñ'字符顯示行。 – dragonfly 2010-09-15 17:47:34

回答

3

我有同樣的問題,我通過在WHERE子句中用「N」加前綴來解決它。

例如,我有一個包含超過21,000個人姓名的表'Person'。最近一位姓「Krzemiński」的人最近被添加到數據庫中,並且當該行被顯示時該名稱顯示正常(即,「ñ」字符被正確顯示)。然而,無論是下面的語句返回任何記錄:

SELECT * FROM WHERE人= FamilyName '克熱明斯基'
SELECT * FROM人回來,在那裏FamilyName LIKE 'Krzemiń%'

...但這些語句都正確的記錄:

SELECT * FROM WHERE人LIKE FamilyName 'Krzemi%'
SELECT * FROM WHERE人LIKE FamilyName 'Krzemi%滑雪'

當我執行以下語句:
SELECT * FROM人WHERE FamilyName LIKE「%N%」

我得到包含字母「n」(不區分符號)所有8900條記錄,但我獲取包含記錄的「N」字符。我用波蘭所有的字符(ąćęłńóśźż)試過這個最後一個查詢,除了「ó」之外,所有這些字符都表現出相同的行爲(即,返回所有帶有低等同ASCII字符的記錄)。奇怪的是,「ó」按原樣工作,只返回FamilyName字段中帶有「ó」的記錄。

在任何情況下,解決方法是在搜索條件前面添加「N」,以便將其顯式聲明爲Unicode。

因此,下面的語句:

SELECT * FROM WHERE人LIKE FamilyName N '%N%'
SELECT * FROM WHERE人= FamilyNameN'Krzemiński」

...都返回正確的記錄集。

我很困惑的原因是我有很多奇怪的變音符的記錄,即使沒有「N」前綴,它們也會返回正確的記錄。到目前爲止,我發現只需要明確的「N」前綴的字符就是波蘭語字符。

希望這可以幫助....

阿羅哈, 豐富

+0

這是問題所在。我不知道SQL Server中的N前綴。 – dragonfly 2011-04-20 20:43:17

0

只需使用nvarchar的,而不是VARCHAR作爲列保存記錄的數據類型。