UTF-8
我在 SQL Server 2005/2008中找不到直接设置相关的选项Collations/Charsets
,这与在其他 SQL 引擎中设置的可能相同,但在 SQL Server 2005/2008 中只有拉丁语和 SQL 排序规则。
是否有一些选项可以在 Win2008 操作系统上的 SQL Server 引擎(两个版本)2005/2008 中强制/安装这些排序规则/字符集
UTF-8
我在 SQL Server 2005/2008中找不到直接设置相关的选项Collations/Charsets
,这与在其他 SQL 引擎中设置的可能相同,但在 SQL Server 2005/2008 中只有拉丁语和 SQL 排序规则。
是否有一些选项可以在 Win2008 操作系统上的 SQL Server 引擎(两个版本)2005/2008 中强制/安装这些排序规则/字符集
不,没有。SQL Server 不支持 UTF-8。
如果需要 unicode 数据,则需要将列定义为 nvarchar/nchar。注意,内部 SQL Server 将其存储为 UCS-2。
请注意,这已在 Connect 上向 MS提出请求,并且有一篇较旧的知识库文章。还有这个博客上的一些信息
从 SQL Server 2019(目前处于测试版/“社区技术预览版”)开始,通过一系列新的 UTF-8 排序规则提供对 UTF-8 的原生支持。但是,能够使用 UTF-8 并不意味着您应该这样做。使用 UTF-8 有明显的缺点,例如:
NVARCHAR
NVARCHAR
1 个字节。它真正归结为:UTF-8 是一种存储格式设计,可让 8 位系统(通常围绕 ASCII 和 ASCII 扩展 - 代码页设计)使用 Unicode 而不会破坏任何东西或需要对现有系统进行任何修改文件以保持运行。UTF-8 非常适合文件系统和网络,但存储在SQL Server 中的数据两者都不是。恰好大部分(或完全)在标准 ASCII 范围内的数据在存储为 UTF-16 / 时需要比相同数据更少的空间这一事实
NVARCHAR
是一个副作用。当然,这是一个可以证明是有用的副作用,但这个决定需要由既了解数据又了解该决定的后果/缺点的人做出。这是不是一般用途的功能。此外,UTF-8(在 SQL Server 中)的主要用例是已经使用 UTF-8 的应用程序代码,可能已经使用另一个支持它的 RDBMS,并且不希望或没有能力更新应用程序代码/数据库架构使用
NVARCHAR
数据类型(用于表、变量、参数等),或在字符串文字前加上大写“N”。目标与 UTF-8 存在的原因相同:使应用程序代码能够使用 Unicode,而不改变整体结构或呈现现有数据无效。如果这描述了您的情况,请使用 UTF-8,但请注意它仍然存在一些错误/问题。如果您在不使用
NVARCHAR
或大写“N”前缀字符串文字的情况下没有明确需要 Unicode 工作,那么 UTF-8 的唯一另一个好处是,如果您有很多需要允许的大部分标准 ASCII 数据Unicode 字符,并且您正在使用NVARCHAR(MAX)
(这意味着数据压缩不起作用),并且表会频繁更新(因此聚集列存储索引可能不会真正提供帮助)。详细内容请看我的帖子:
SQL Server 2019 中的原生 UTF-8 支持:救世主还是假先知?
您不能将 UTF-8 安装为字符集,因为它不是字符集,而是一种编码。
如果要存储 Unicode 文本,请使用
nvarchar
数据类型。如果要存储使用 UTF-8 编码的文本,请将其存储为二进制数据 (
varbinary
)。我的情况是,我必须显示阿拉伯字符,而我的开发数据库是在 2014 年,这里一切正常。在这里,在查询中我可以看到阿拉伯语字符,我的排序规则是 SQL_Latin1_General_CP1256_CI_AS
但我的作品是在 SQL Server 2008 中制作的,最终它不支持 UTF-8 字符集。在这里,我可以看到所有????????????? 因为 SQL 2008 不支持 UTF-8。
我所做的就是将所有 varchar 更改为 nvarchar,我可以正确地看到阿拉伯语字符。此外,我将 2008 年的数据库排序规则更改为 SQL_Latin1_General_CP1256_CI_AS