2011-02-28 104 views
5

有沒有辦法確定哪些記錄是SQL Server 2008中的雙字節字符?SQL Server 2008搜索雙字節字符

例如,如果國家/地區填寫空白,我想查詢中文,韓文和日文中的所有記錄,我該怎麼辦?

您的意見非常感謝。

我想我可能會困惑你們。一切都存儲在nvarchar中。一些記錄是中文的,一些是韓文的,一些是西班牙文的,還有更多。我們想找出中國,日本和韓國的記錄來做一些事情。那有意義嗎?

+1

如果'records'你的意思'rows'然後對於'nvarchar()'列,您將在** all **行中具有雙字節字符。 「Hello」和「你好」都以雙字節字符存儲。 – 2011-02-28 18:46:34

+0

您是否問過用於日本漢字和其他主要亞洲語言的舊式'雙字節字符集'(DBCS),還是MS使用Unicode('國家文本')? – DaveE 2011-02-28 19:22:00

回答

5

有沒有辦法知道哪些記錄是在SQL Server 2008雙字節字符?

您可以使用此 - 如果雙字節字符不能被減少爲單個字節,那麼你在記錄有CJK:

select * from tbl 
where convert(nvarchar(max),convert(varchar(max),somecolumn)) != somecolumn 
+0

看來你的方法有效。我會檢查更多。非常感謝。 – Percy 2011-02-28 19:41:02

0

如果我理解你的話,那可能是因爲這樣一個存儲過程一樣簡單:

DECLARE @SearchString nvarchar(MAX) 
... 
SELECT * FROM MyTable 
WHERE Country = '' and SearchField = @SearchString 

這假定SearchField是nvarchar

如果您有一個nvarchar列,那麼其中的所有信息都將是雙字節。

如果你正在努力尋找那些類型爲nvarchar的所有列,那麼你可以使用下面的查詢:

SELECT OBJECT_NAME(col.OBJECT_ID) as [TableName], col.[name] as [ColName], typ.[name] 
FROM sys.all_columns col 
INNER JOIN sys.types typ 
ON col.user_type_id = typ.user_type_id 
WHERE col.user_type_id = 231 
+1

我認爲「雙字節字符」他意味着UNICODE /'nvarchar',因爲那些需要兩倍數據空間每個字符。 – JNK 2011-02-28 18:25:33

+0

是的,我也這麼認爲。你以同樣的方式閱讀這個問題嗎? – 2011-02-28 18:28:17

+0

我想他想知道如何判斷哪些字段是'nvarchar'而不是'varchar',即哪個字段可以支持UNICODE字符。 – JNK 2011-02-28 18:32:29