如何在SQL Server中检查实际的unicode字符串长度

时间:2018-01-15 11:46:43

标签: php sql-server unicode

如果我们在PHP中检查下面的字符串,那么结果显示如下

  

echo $ Length = strlen('আমারসোনারবাংলা|আমিতোমায়য়ালবাসি。');   输出:222

但是当我们在SQL Query中检查相同的字符串时,输出显示36个字符长。

  

选择LEN('রারসোনারবাংলা|আমিতোমায়য়ালবাসি。')   长度:36

我们如何在MS-SQL Query中测量实际的字符222长度?

2 个答案:

答案 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

一样