如何在VARCHAR ..中存儲字符128到255?SQL:在VARCHAR中存儲擴展ASCII(128到255)
SQL似乎改變其中的一些爲char(63) '?'。我不確定這是否與整理有關? UTF-8? N '..'?我試過COLLATE Latin1_General_Bin,不知道它是否支持擴展ascii雖然..
很明顯與NVARCHAR一起工作,但理論上這應該也適用於VARCHAR ..?
如何在VARCHAR ..中存儲字符128到255?SQL:在VARCHAR中存儲擴展ASCII(128到255)
SQL似乎改變其中的一些爲char(63) '?'。我不確定這是否與整理有關? UTF-8? N '..'?我試過COLLATE Latin1_General_Bin,不知道它是否支持擴展ascii雖然..
很明顯與NVARCHAR一起工作,但理論上這應該也適用於VARCHAR ..?
存儲在VARCHAR /焦炭列超出ASCII字符0-127範圍中的字符由與歸類關聯的代碼頁確定。代碼頁未特別定義的字符被以太映射到類似的字符,或者當沒有字符時被映射到'?'。
可以列出排序規則與此查詢相關的代碼頁一起:
SELECT name, description, COLLATIONPROPERTY(name, 'CodePage') AS CodePage
FROM fn_helpcollations();
丹的回答讓我在寫軌道。
VARCHAR絕對不會存儲擴展ASCII的,但要看與歸類關聯的代碼頁。我使用Latin1_General_100_BIN它使用的代碼頁1252
https://en.wikipedia.org/wiki/Windows-1252
根據此代碼頁下面的字符是不確定的:
129,141,143,144,157
在實際上它看起來像SQL將大多數字符從128到159排除在外。簡單的解決方案就是刪除這些字符。
正確的「擴展ASCII」並不足以使用該術語。字符在字符集中。一個字符集有一個名字。 「擴展ASCII」不會命名字符集。但是,你的問題是,你似乎不知道你的源數據的字符集,並試圖將它存儲到一個系統中,而這個系統並不是爲了存儲它而設計的。 –
對不起湯姆,不同意。擴展ASCII是大多數相當很好理解的術語:https://en.wikipedia.org/wiki/Extended_ASCII –
我不存儲任何特定的字符集,我只是存儲字節值.. –
非常有幫助,發現問題。它使用代碼頁1252,缺少一些擴展字符129,141,143,144,157 –
@DaveSumter,您可以通過使用nvarchar/nchar來避免代碼問題。 –
深刻洞察! thx – Shnugo