2017-06-03 74 views
1

如何在VARCHAR ..中存儲字符128到255?SQL:在VARCHAR中存儲擴展ASCII(128到255)

SQL似乎改變其中的一些爲char(63) '?'。我不確定這是否與整理有關? UTF-8? N '..'?我試過COLLATE Latin1_General_Bin,不知道它是否支持擴展ascii雖然..

很明顯與NVARCHAR一起工作,但理論上這應該也適用於VARCHAR ..?

回答

3

存儲在VARCHAR /焦炭列超出ASCII字符0-127範圍中的字符由與歸類關聯的代碼頁確定。代碼頁未特別定義的字符被以太映射到類似的字符,或者當沒有字符時被映射到'?'。

可以列出排序規則與此查詢相關的代碼頁一起:

SELECT name, description, COLLATIONPROPERTY(name, 'CodePage') AS CodePage 
FROM fn_helpcollations(); 
+0

非常有幫助,發現問題。它使用代碼頁1252,缺少一些擴展字符129,141,143,144,157 –

+1

@DaveSumter,您可以通過使用nvarchar/nchar來避免代碼問題。 –

+0

深刻洞察! thx – Shnugo

0

丹的回答讓我在寫軌道。

VARCHAR絕對不會存儲擴展ASCII的,但要看與歸類關聯的代碼頁。我使用Latin1_General_100_BIN它使用的代碼頁1252

https://en.wikipedia.org/wiki/Windows-1252

根據此代碼頁下面的字符是不確定的:

129,141,143,144,157

在實際上它看起來像SQL將大多數字符從128到159排除在外。簡單的解決方案就是刪除這些字符。

+0

正確的「擴展ASCII」並不足以使用該術語。字符在字符集中。一個字符集有一個名字。 「擴展ASCII」不會命名字符集。但是,你的問題是,你似乎不知道你的源數據的字符集,並試圖將它存儲到一個系統中,而這個系統並不是爲了存儲它而設計的。 –

+0

對不起湯姆,不同意。擴展ASCII是大多數相當很好理解的術語:https://en.wikipedia.org/wiki/Extended_ASCII –

+0

我不存儲任何特定的字符集,我只是存儲字節值.. –