對于大多數(shù)SQL Server編程開發(fā)者來說,當(dāng)計算字符串的長度時,腦海中閃現(xiàn)的第一個函數(shù)是:Len(string),這個“長度”,默認(rèn)情況下,是指字符的數(shù)量,一個英語字符是一個長度,一個漢字是一個長度。大多數(shù)的字符串函數(shù),例如charindex,substring,stuff等函數(shù),其位置都是針對字符數(shù)量的,這使得Len函數(shù)深入人心,但是,一個Unicode字符,占用的字節(jié)數(shù)量是2Byte,而一個普通的ASCII字符占用的字節(jié)數(shù)量是1Byte,當(dāng)需要計算字符串占用的字節(jié)數(shù)量時,要如何計算字符串的長度?對于各個類型所占用的字節(jié)數(shù)量,又該如何計算?帶著這個疑問,讓我們一睹DataLength函數(shù)的廬山真面目。
一,字符數(shù)量
Len(string) 函數(shù)返回的數(shù)值是字符的數(shù)量(number of characters),在統(tǒng)計字符數(shù)量時,不包含結(jié)尾空格,但是包含前導(dǎo)空格。
示例,Len 函數(shù)返回的是字符的數(shù)量,而不是字符的字節(jié)數(shù)量。
declare @str_v varchar(10)declare @str_nv nvarchar(10)declare @str_nv_cn nvarchar(10)set @str_v=' ab 'set @str_nv=N' ab 'set @str_nv_cn=N' 悅光陰'select len(@str_v) as len_v ,len(@str_nv) as len_nv , len(@str_nv_cn) as str_nv_cn
二,字節(jié)數(shù)量
對于varchar類型,大家都知道,這是單字節(jié)字符,一個字符占用一個字節(jié),總共能夠表示的256個字符;而對于nvarchar類型,一個字符占用兩個字節(jié),能夠表示世界上所有的字符集,一個unicode字符占用兩個字節(jié),如果要計算字符串占用的字節(jié)數(shù)量(number of bytes),請使用DataLength()函數(shù),該函數(shù)統(tǒng)計字節(jié)數(shù)量時,字符串的所有字符都會計算在內(nèi),包括前導(dǎo)空格和結(jié)尾空格。
示例,每個unicode字符占2B,ASCII 字符占1B。
網(wǎng)友評論