表中有一些列可能会包含一些非 ANSI 字符,我们必须存储它们。在 SQL Server 2019 之前,只有 1 个选项 -NVARCHAR
数据类型,但是从 SQL Server 2019 开始,可以使用VARCHAR
以 结尾的排序规则的数据类型%_UTF8
。我理解,为了完全兼容大小,我需要将VARCHAR
列大小加倍,所以如果是,VARCHAR(20)
则需要VARCHAR(40)
覆盖如果有人插入所有 20 个字符都是非 ANSI 的文本的情况,但这种排序规则还有其他缺点吗?该列中的数据将只有 ~99.9% 的 ANSI 字符。
您可能需要做更多的事情,具体取决于您拥有或将要存储的字符。正如文档所述:
例如,
SELECT DATALENGTH('🔥')
使用 UTF8 排序规则返回 4,但LEN
返回 1。以及(强调)
每次改变都会带来风险,通过测试可以减轻风险。
您的代码和应用程序可能尚未准备好处理长度可变的 1-4 字节字符。您的某些 T-SQL 可能会使用做出假设
DATALENGTH
。您可能还需要检查那些不完全支持补充字符的内置函数(尽管现在大多数都支持)。UTF-8 支持相对较新,因此您可能会遇到数十年前的排序规则中不存在的错误。我不记得听过任何特别可怕的故事。
如果列排序规则与数据库(和tempdb !)默认排序规则不同,也会暴露以前统一的情况所掩盖的排序规则比较问题。