字符串的长度,是字符数量,还是字节数量?

栏目: IT技术 · 发布时间: 6年前

内容简介:大多数的字符串函数,例如charindex,substring,stuff等函数,其位置都是针对字符数量的,这使得Len函数深入人心,但是,一个Unicode字符,占用的字节数量是2Bytes,而一个普通的ASCII字符占用的字节数量是1Byte,当需要计算字符串占用的字节数量时,要如何计算字符串的长度?

对于大多数SQL Server编程开发者来说,当计算字符串的长度时,脑海中闪现的第一个函数是:Len(string),这个“长度”,默认情况下,是指字符的数量,一个英语字符是一个长度,一个汉字是一个长度。大多数的字符串函数,例如charindex,substring,stuff等函数,其位置都是针对字符数量的,这使得Len函数深入人心,但是,一个Unicode字符,占用的字节数量是2Bytes,而一个普通的ASCII字符占用的字节数量是1Byte,当需要计算字符串占用的字节数量时,要如何计算字符串的长度?对于各个类型所占用的字节数量,又该如何计算?带着这个疑问,让我们一睹DataLength函数的庐山真面目。

一,字符数量

Len(string) 函数返回的数值是字符的数量(number of characters),在统计字符数量时,不包含结尾空格,但是包含前导空格。

示例,Len 函数返回的是字符的数量,而不是字符的字节数量。

字符串的长度,是字符数量,还是字节数量?

二,字节数量

对于varchar类型,大家都知道,这是单字节字符,一个字符占用一个字节,总共能够表示的256个字符;而对于nvarchar类型,一个字符占用两个字节,能够表示世界上所有的字符集,一个unicode字符占用两个字节,如果要计算字符串占用的字节数量(number of bytes),请使用DataLength()函数,该函数统计字节数量时,字符串的所有字符都会计算在内,包括前导空格和结尾空格。

示例,每个unicode字符占2B,ASCII 字符占1B。

字符串的长度,是字符数量,还是字节数量?

三,依赖字符数量的函数

对于字符串函数:left,right,其长度值是指字符的数量;对于含有位置参数的字符串函数,charindex、stuff 和 substring,是以字符数量来计算起始位置和长度。

四,查看数据类型(Data Type)所占用的存储空间

DataLength()函数能过返回任意数据类型的变量所占用的字节数量,在设计表的schema时,为column定义窄的数据类型,在存储海量数据行时,该函数十分有用。

例如,对于datetime类型占用固定的8B,DateTime2数据类型存储日期和时间,占用的存储空间不固定。根据存储的时间部分 fractional seconds precision来确定DateTime2的Storage Size,6 bytes for precisions less than 3; 7 bytes for precisions 3 and 4. All other precisions require 8 bytes.

字符串的长度,是字符数量,还是字节数量?

如果对time的精度(Precision)要求不是很高,保留2位毫秒,使用datetime2(2),比其他类型节省存储空间。

 

参考doc:

String Functions (Transact-SQL)

LEN (Transact-SQL)

DATALENGTH (Transact-SQL)


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Unity 3D游戏开发(第2版)

Unity 3D游戏开发(第2版)

宣雨松 / 人民邮电出版社 / 2018-9 / 89.00元

Unity 是一款市场占有率非常高的商业游戏引擎,横跨25 个主流游戏平台。本书基于Unity 2018,结合2D 游戏开发和3D 游戏开发的案例,详细介绍了它的方方面面,内容涉及编辑器、游戏脚本、UGUI 游戏界面、动画系统、持久化数据、静态对象、多媒体、资源加载与优化、自动化与打包等。 本书适合初学者或者有一定基础的开发者阅读。一起来看看 《Unity 3D游戏开发(第2版)》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

随机密码生成器
随机密码生成器

多种字符组合密码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具