在SQL Server 2019中,Microsoft引入了对和数据类型的UTF-8支持,并说:CHAR
VARCHAR
根据使用的字符集,此功能可以节省大量存储空间。例如,使用启用了UTF-8的排序规则将具有ASCII字符串的现有列数据类型从NCHAR(10)更改为CHAR(10),可将存储需求减少近50%。这种减少是因为NCHAR(10)需要22个字节来存储,而CHAR(10)对于相同的Unicode字符串则需要12个字节。
UTF-8似乎支持每个脚本,因此基本上我们可以开始在varchar
和char
列中存储Unicode数据。就像文档中所说的那样,这可以减少表和索引的大小,并且由于读取的数据量更少,因此可以得到更好的性能。
我想知道这是不是意味着我们可以停止使用nvarchar
和nchar
列,它实现UTF-16?
谁能指出一个方案和理由,不使用带UTF
编码的char数据类型并继续使用n-chars类型?
CHAR
类型的情况要比使用Unicode类型的情况更糟(使用或不使用压缩,因为最终需要解压缩数据才能进行处理)。还请考虑Windows的本机字符串类型是Unicode,因此通常需要对UTF-8字符串进行解码。涉及的权衡意味着这些N
类型不太可能在不久的将来被淘汰。
CHAR
如果引擎在本地支持直接将字符串作为UTF-8处理,那么UTF-8的#1“杀手级应用” 可能是Linux上的SQL Server-在这里,UTF-8是“本机”字符集(或多或少)并保持字符串UTF-16的效率较低。CHAR
当然,在已经使用Windows的地方使用Windows也不会造成伤害,因为归类限制了可以存储的字符从来就没有吸引力。