默认情况下 - Microsoft SQL Server中数据库的字符编码集是什么?
如何在SQL Server中查看当前字符编码?
IVe阅读了很多关于此的内容.
还有一些问题:
我不是在谈论区分大小写......
如果我有一个char(?例如)并且他存储在nvarchar - 它可以容纳任何东西,为什么我需要collation在这里?
如果我是"FaceBook"并且我需要能够存储语言中的all字符all,那么校对和我的nvarchar列之间的关系是什么?
提前致谢.
虽然研究在SQL Server数据库中存储大多数英语但有时不存储数据的选项可能会非常大,但我倾向于将大多数字符串数据存储为UTF-8编码.
但是,微软之所以选择UCS-2是因为我并不完全明白是什么导致我猜测这种倾向.SQL Server 2012的文档确实展示了如何创建UTF-8 UDT,但UCS-2的决定可能会遍及SQL Server.
Wikipedia(有趣地指出UCS-2已经过时,支持UTF-16)注意到UTF-8是一个可变宽度字符集,能够编码任何Unicode数据点及其provides the de facto standard encoding for interchange of Unicode text.因此,感觉任何Unicode字符都可以用UTF-8表示,并且由于大多数文本都是英文,因此表示将几乎是UCS-2的两倍(我知道磁盘"便宜",但磁盘缓存不是并且,内存与我正在处理的数据大小不相比.当工作集大于可用RAM时,许多操作会以指数方式降级.
游泳UCS-2流可能会遇到什么问题?
我在NVarchar名为“邮政编码”的字段中有一些 Unicode 字符。当我将它们转换为 时,结果中Varchar有一个。?
我的代码是:
select PostalCode, cast((PostalCode) as varchar)) as val from table
Run Code Online (Sandbox Code Playgroud)
结果是:
PostalCode | val
053000 | 053000?
Run Code Online (Sandbox Code Playgroud)
在这里我得到了?结果。有什么办法可以删除这些特殊字符吗?
根据 SQL Server 的文档(和遗留文档),nvarchar没有_SC排序规则的字段应该使用UCS-2 ENCODING.
从 SQL Server 2012 (11.x) 开始,当使用支持补充字符 (SC) 的排序规则时,这些数据类型存储完整范围的 Unicode 字符数据并使用 UTF-16 字符编码。如果指定了非 SC 归类,则这些数据类型仅存储 UCS-2 字符编码支持的字符数据子集。
它还指出,UCS-2 ENCODING仅存储 支持的子集字符UCS-2。从维基百科UCS-2 规范:
UCS-2 对每个字符使用 0 到 65,535 之间的单个代码值 [...],并且只允许两个字节(一个 16 位字)来表示该值。因此,UCS-2 允许 BMP 中表示字符的每个代码点的二进制表示。UCS-2 不能表示 BMP 之外的代码点。
因此,根据上面的规范,我似乎无法存储像这样的表情符号:其值为0x1F60D(或十进制的 128525,远高于 UCS-2 的 65535 限制)。但是在 SQL Server 2008 R2 或 SQL Server 2019(都带有 default SQL_Latin1_General_CP1_CI_AS COLLATION)上,在一个nvarchar字段上,它被完美地存储和返回(尽管不支持与LIKE或进行比较 …