2015-03-02 71 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特定字符。