"Surrogate Pair" 概念在数据库中如何工作?
How does "Surrogate Pair" concept works in a database?
我的问题与数据库(特别是 SQL 服务器有关):在官方指南中,提到在使用 "NVARCHAR/NCHAR" 时,使用“每个字符 2 个字节的存储空间”并且"if a surrogate pair is needed, a character will require 4 bytes of storage." 需要代理对时如何使用4字节? "need" 将如何与 SQL 服务器通信,它如何知道?我只是不确定这将如何解决 - 当我编程时,我要么将某些东西定义为 UTF-8、16 或 32。似乎 SQL 服务器只接受 UTF-16 并且它会在需要时以某种方式使用代理对。有人可以向我解释这应该如何工作吗?另外,我真的非常感谢资源和参考资料,这样我就可以对其进行更多研究。
我尝试阅读有关代理对的内容,除了一些只触及表面并解释 "surrogate pair is just a mechanism for represeinting UTF-32 characters using two UTF-16s" 的来源外,几乎没有其他内容。
非常感谢您,对于冗长的问题感到抱歉。
好吧,有时最好自己进行研究并找到答案(即使这可能需要很多天的很多小时)。无论如何,我找到了问题的答案。
简单来说,UTF-16 的前身 UCS-2 是一种 FIXED-LENGTH 编码。这意味着 UCS=-2 中的所有字符正好占用 2 个字节。 UTF-16 是在 UCS-2 之后引入的,与此相反,它是一种可变长度编码。这意味着 UTF-16,通过代理配对,将允许定义占用 32 位而不是 16 位的字符。这是如何完成的? UTF-16 编码中存在一个保留用于配对的范围。这意味着任何使用此范围(恰好是 1024 个点)的编码都被自动假定为等待一对。
所以,这个时候,你可能会问"What happens if I have USC-2 encoding and my program sees a character in that forbidden range"。答案很简单"Nothing"。 UCS-2 没有定义该范围,这实际上是 UTF-16 和 UCS 之间的唯一区别。 UCS 绑定程序将无法识别 UTF-16 特定字符。
我的问题与数据库(特别是 SQL 服务器有关):在官方指南中,提到在使用 "NVARCHAR/NCHAR" 时,使用“每个字符 2 个字节的存储空间”并且"if a surrogate pair is needed, a character will require 4 bytes of storage." 需要代理对时如何使用4字节? "need" 将如何与 SQL 服务器通信,它如何知道?我只是不确定这将如何解决 - 当我编程时,我要么将某些东西定义为 UTF-8、16 或 32。似乎 SQL 服务器只接受 UTF-16 并且它会在需要时以某种方式使用代理对。有人可以向我解释这应该如何工作吗?另外,我真的非常感谢资源和参考资料,这样我就可以对其进行更多研究。
我尝试阅读有关代理对的内容,除了一些只触及表面并解释 "surrogate pair is just a mechanism for represeinting UTF-32 characters using two UTF-16s" 的来源外,几乎没有其他内容。
非常感谢您,对于冗长的问题感到抱歉。
好吧,有时最好自己进行研究并找到答案(即使这可能需要很多天的很多小时)。无论如何,我找到了问题的答案。
简单来说,UTF-16 的前身 UCS-2 是一种 FIXED-LENGTH 编码。这意味着 UCS=-2 中的所有字符正好占用 2 个字节。 UTF-16 是在 UCS-2 之后引入的,与此相反,它是一种可变长度编码。这意味着 UTF-16,通过代理配对,将允许定义占用 32 位而不是 16 位的字符。这是如何完成的? UTF-16 编码中存在一个保留用于配对的范围。这意味着任何使用此范围(恰好是 1024 个点)的编码都被自动假定为等待一对。
所以,这个时候,你可能会问"What happens if I have USC-2 encoding and my program sees a character in that forbidden range"。答案很简单"Nothing"。 UCS-2 没有定义该范围,这实际上是 UTF-16 和 UCS 之间的唯一区别。 UCS 绑定程序将无法识别 UTF-16 特定字符。