如何"代理对"概念在数据库中有效吗?

时间:2015-03-02 14:04:55

标签: utf-8 sql-server-2012 surrogate-pairs

我的问题涉及数据库(特别是SQL Server):在官方指南中,提到使用" NVARCHAR / NCHAR","每个字符2个字节的存储空间&#34 ;使用和#34;如果需要代理对,则一个字符需要4个字节的存储空间。"当需要代理对时,如何使用4字节?怎么样"需要"将与SQL Server进行通信,它将如何知道?我只是不确定这是如何解决的 - 当我编程时,我要么定义为UTF-8,16或32.似乎SQL Server只接受UTF-16并且它& #39; ll在需要时以某种方式使用代理对。有人可以向我解释这应该如何工作?此外,我真的非常感谢来源和参考资料,所以我可以更多地研究它。

我尝试阅读有关代理对的内容,除了一些触及表面的来源并解释说"代理对只是一种使用两个UTF-16表示UTF-32字符的机制时,几乎没有任何内容。 34 ;.

非常感谢,并对这个冗长的问题感到抱歉。

1 个答案:

答案 0 :(得分:0)

好的,有时最好做自己的研究并找到答案(即使这可能需要很多天才能完成)。无论如何,我找到了我的问题的答案。

简而言之,UCS-2(UTF-16的前身)是一个FIXED-LENGTH编码。这意味着UCS = -2中的所有字符恰好占用2个字节。在UCS-2之后引入了UTF-16,这与可变长度编码形成对比。这意味着UTF-16通过代理配对,允许用户定义占用32位而不是16位的字符。这是怎么做到的?存在用于配对的保留UTF-16编码范围。这意味着任何使用此范围的编码(恰好是1024个点)都会自动被假定为等待一对。

所以,在这个时刻,你可能会问"如果我有USC-2编码会发生什么,我的程序会看到禁止范围内的角色"。答案很简单,没有什么"。该范围不是由UCS-2定义的,实际上是UTF-16和UCS之间的唯一区别。 UCS绑定程序将无法识别UTF-16特定字符。