首页 > 解决方案 > DATALENGTH 不计算 SQL Server 中的无换行符 (0xA0) 字符

问题描述

DATALENGTH0xA0在 SQL Server 中返回字符串中的字节数时,不计算无换行符 ( ) 字符。在 PostgreSQL 中,OCTET_LENGTH它计算指定字符串中的字节数,0xA0同时返回结果集。这是 SQL Server 中的错误吗?

例子 -

下面这两个都返回 9 作为输出:

SELECT DATALENGTH('Blah Blah'); --contains no-breakspace

您可以通过 => https://unicodelookup.com/在上述选择中查找不间断空格字符

SELECT DATALENGTH('Blah Blah');

SQL Server 中是否还有其他可用功能也可以计算在内?LEN没有帮助。

标签: sql-serverpostgresql

解决方案


该字符串在 PostgreSQL 中采用 UTF-8 编码。生成的字节数为 10,因为 8 个 ASCII 字符(0-127 代码点范围)需要 8 个字节,加上无换行符字符需要 2 个字节。

SQL Server varchar 数据类型只需要 9 个字节,因为非 ASCII 字符是根据排序规则代码页映射的。只需要 1 个字节来存储没有 Unicode 编码的无换行符字符,对于相同的值总共需要 9 个字节。


推荐阅读