【发布时间】:2017-04-27 06:15:04
【问题描述】:
这纯粹是理论上的问题
假设我有 Unicode 旋风 (???? 1F300) 符号。如果我尝试将其存储在具有默认Latin1_General_CI_AS 排序规则的varchar 列中,则旋风符号不能放入varchar 中每个符号使用的一个字节...
我可以看到的方式:
- 就像 javascript 对基本平面之外的符号 (BMP) 所做的那样,它将它们存储为 2 个符号(代理对),然后需要对 put them back together 进行额外处理...
- 只需截断符号,存储第一个字节并删除第二个字节....(数据是吐司 - 你应该阅读手册......)
- 数据被破坏,没有任何有用的东西被保存......(数据是吐司 - 你应该阅读手册......)
- 其他一些超出我心理承受能力的选择.....
我在插入几个不同的 unicode 符号后做了一些研究
INSERT INTO [Table] (Field1)
VALUES ('????')
INSERT INTO [Table] (Field1)
VALUES ('????')
然后在这两种情况下将它们读取为字节SELECT
cast (field1 as varbinary(10)),我得到了0x3F3F。
ascii 中的3F 是 ? (question mark) 例如两个问号 (??),我在正常运行时也会看到 select * 这是否意味着数据是吐司,甚至不是第一口正在存储吗?
不符合排序规则的 Unicode 数据如何存储在 varchar 列中?
【问题讨论】:
标签: sql-server unicode encoding collation varchar