2015-03-02 73 views
0

我的問題涉及到數據庫(特別是SQL Server):在官方指南中提到,當使用「NVARCHAR/NCHAR」時,使用「每個字符2字節的存儲空間」和「如果需要代理對,一個角色將需要4個字節的存儲空間。「當需要代理對時,如何使用4字節?那麼「需求」如何與SQL Server進行交流,它將如何知道?我只是不確定這將如何解決 - 當我編程時,我會定義一些東西爲UTF-8,16或32.看起來SQL Server只接受UTF-16,它會以某種方式使用代理對需要時。有人可以向我解釋這是如何工作的嗎?另外,我真的很感謝來源和參考資料,所以我可以更多地研究它。「代理對」概念如何在數據庫中起作用?

我試着閱讀有關代理對的內容,除了一些只是觸及表面並解釋「代理對只是使用兩個UTF-16表示UTF-32字符的機制」的解釋之外,沒有其他的東西。

非常感謝您對冗長的問題抱歉。

回答

0

好的,有時候最好做自己的研究並找到答案(即使這可能需要很多天的時間)。無論如何,我找到了我的問題的答案。簡而言之,UTF-16的前身UCS-2是一種固定長度編碼。這意味着UCS = -2中的所有字符都佔用2個字節。 UCS-2之後引入了UTF-16,這與可變長度編碼相反。這意味着通過代理配對,UTF-16將允許人們定義佔用32位而不是16位的字符。這是如何完成的?在UTF-16編碼中存在一個保留用於配對的範圍。這意味着使用這個範圍的任何編碼(恰好是1024個點)被自動假定等待一對。

所以,在這個時候,你可能會問「如果我有USC-2編碼會發生什麼情況,而且我的程序在那個禁區內看到了一個字符」。答案只是「沒有」。該範圍不是由UCS-2定義的,實際上這是UTF-16和UCS之間的唯一區別。 UCS綁定的程序將無法識別UTF-16特定字符。