SQL Server中的DataLength和Len函数

DataLength返回字符串的字节长度. Len返回字符串的字符长度. 这种区别主要存在于中英文混输的情况.用以下例子来说明情况. example :

select len(convert(varchar(50),N'狮lion'))                --5 N''表示Unicode格式字符串
select datalength(convert(varchar(50),N'狮lion'))         --6
select len(N'狮lion')                                     --5
select datalength(N'狮lion')                              --10

接下来我们分析一下为何会这样. Len返回字符串的字符长度,这个好理解,一个汉字'狮'+4个字母'lion'=5个字符.每个汉字和字母都占一个字符长度. DataLength返回字符串的字节长度.对于字节长度,需要理解:一般编码模式下,汉字和英文字母所占字节是不一样的.一般来说,汉字占2个字节,英文字符占一个字节.而对于Unicode编码,汉字和英文字母都占2个字节. 讲解一下varchar和nvarchar的区别,varchar是普通编码的字符串,nvarchar是Unicode编码的字符串,对应例子,就是对汉字'狮'来说,varchar格式的字符串长度为1,nvarchar格式的字符串长度为2. 因此对以上例子来说:

len(convert(varchar(50),N'狮lion'))    --返回字符长度,'狮lion',一共5个字符,varchar格式字符
len(N'狮lion')                         --返回字符长度,'狮lion',一共5个字符,nvarchar格式字符
datalength(convert(varchar(50),N'狮lion'))    --返回字节长度,varchar格式字符'狮lion','狮'占2个字节,
                                              --'lion'中每个字母占用一个字节,共占用4个字节
datalength(N'狮lion')          --返回字节长度,Unicode格式字符,汉字'狮'占2个字节,
                               --'lion'中每个字母占用2个字节,共占用8个字节

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏郭耀华‘s Blog

Java String 类

字符串广泛应用 在Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。 ---- 创建字符串 创建字符串最简...

38112
来自专栏彭湖湾的编程世界

【javascript】您好, 您要的ECMAScript6速记套餐到了 (一)

【前言】本文“严重参考” 自阮一峰老师写的ES6文档,在此我郑重感谢他沉默无声的帮助 总结一下ES6为 javascript中的 对象/数组/函数 这JS三巨头...

1917
来自专栏程序员互动联盟

【专业知识】C++的强制类型转换

C 风格(C-style)强制转换一般用(类型修饰)来转换类型。C++则有自己的转换方式 使用标准C++的类型转换符:static_cast、dynamic_c...

3064
来自专栏简书专栏

Python正则表达式re库的使用

re.search函数需要传入2个参数,第1个参数是正则表达式,第2个参数是要进行搜索的源字符串。 re.search函数返回结果的数据类型是sre.SRE_...

1772
来自专栏coding for love

JS原生引用类型解析4-String类型

(注1:如果有问题欢迎留言探讨,一起学习!转载请注明出处,喜欢可以点个赞哦!) (注2:更多内容请查看我的目录。)

783
来自专栏Esofar 开发日记

JavaScript权威指南 - 数组

JavaScript数组是一种特殊类型的对象。 JavaScript数组元素可以为任意类型,最大容纳232-1个元素。 JavaScript数组是动态的,有...

874
来自专栏xingoo, 一个梦想做发明家的程序员

static_cast const_cast reindivter_cast dynamic_cast

C 风格(C-style)强制转型如下: (T) exdivssion // cast exdivssion to be of type T 函数风格(Func...

21710
来自专栏desperate633

LeetCode 27. Remove Element题目分析代码

给定一个数组和一个值,在原地删除与值相同的数字,返回新数组的长度。 元素的顺序可以改变,并且对新的数组不会有影响。

682
来自专栏水击三千

JavaScript操作符(布尔操作符、乘性操作符和加性操作符)

布尔操作符 布尔操作符用来测试两个值的关系,布尔操作符有三个,逻辑非(!)、逻辑与(&&),逻辑或(||)。 逻辑非由一个叹号(!)组成,可以应用于JavaSc...

2096
来自专栏Java帮帮-微信公众号-技术文章全总结

Java基础-Java基础-02总结关键字,标识符,注释,常量进制,变量数据类型

首先原谅小编的过错,昨天第二篇文章标题是: 程序员:为什么选择Java? ? 1:关键字(掌握) (1)被Java语言赋予特定含义的单词 (2)特点: 全...

2535

扫码关注云+社区

领取腾讯云代金券