如果我们在PHP中检查下面的字符串,那么结果显示如下
echo $ Length = strlen('আমারসোনারবাংলা|আমিতোমায়য়ালবাসি。'); 输出:222
但是当我们在SQL Query中检查相同的字符串时,输出显示36个字符长。
选择LEN('রারসোনারবাংলা|আমিতোমায়য়ালবাসি。') 长度:36
我们如何在MS-SQL Query中测量实际的字符222长度?
答案 0 :(得分:1)
根据Microsoft Docs LEN LEN
将返回字符串的长度。
如果您想获取字符串的字节,则需要DATALENGTH
根据Microsoft Docs DATALENGTH。
其他信息
MySQL的等价物是:
根据用于带字节的字符大小的MySQL Docs LENGTH LENGTH
根据{{3}} CHAR_LENGTH
用于"计数"忽略字节长度的结果长度。这将看到一个4字节字符作为1长度。
答案 1 :(得分:1)
您首先需要了解unicode字符和ascii字符之间的区别。在select语句中,使用ascii文字,而不是unicode文字。实际上,你正在测量垃圾"测试"。此外,您不会识别要使用tsql测量的任何值的数据类型。你的问题表明你没有在sql server中使用unicode字符串 - 这是一个很大的问题。正如其他人所指出的那样,sql server中的unicode字符总是2个字节。为了帮助说明sql server端:
set nocount on;
declare @x varchar(50), @y nvarchar(50);
set @y = N'আমার সোনার বাংলা|আমি তোমায় ভালবাসি।';
set @x = @y;
select len(@x) as xlen, len(@y) as ylen;
select datalength(@x) as xdlen, datalength(@y) as ydlen;
select @x, @y;
由于PHP中的strlen返回字节数,并且由于PHP使用不同类型的unicode编码,因此您的目标是不可能的。也许你应该计算字符,而不是字节?像this
一样