You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL Server中获取与PHP strlen一致的Unicode字符串实际长度?

搞定SQL Server和PHP字符串长度匹配的问题

嘿,这个差异我太熟了!本质是PHP和SQL Server对“长度”的定义完全不一样,我给你一步步说清楚:

为啥结果差这么多?

  • PHP的strlen():它算的是字节数!你这段孟加拉语是UTF-8编码的,每个字符要占3-4个字节,加起来总字节数就是222。
  • SQL Server的LEN():它只算字符个数,不管每个字符占多少字节,你数一下这段文本的字符(包括那个竖线和句号)刚好是36个,所以返回36。

怎么在SQL Server里拿到222这个结果?

你需要用SQL Server的DATALENGTH()函数,但得分两种情况:

情况1:你的数据库是SQL Server 2019+,且字符串用UTF-8的varchar存储

直接用DATALENGTH()就行,它会返回实际的字节数:

SELECT DATALENGTH('আমার সোনার বাংলা|আমি তোমায় ভালবাসি।') AS ByteLength;

执行这个就能得到和PHP strlen()一模一样的222。

情况2:字符串是存成nvarchar(Unicode UTF-16格式)

这时候DATALENGTH()会返回72(因为每个nvarchar字符占2字节,36*2=72),不是我们要的。得先把它转成UTF-8编码的varchar,再统计:

SELECT DATALENGTH(CONVERT(varchar(MAX), 'আমার সোনার বাংলা|আমি তোমায় ভালবাসি।', 65001)) AS ByteLength;

这里的65001是UTF-8的代码页编号,转完之后再统计字节数就得到222了。

一句话总结

要匹配PHP的strlen(),SQL Server就得统计UTF-8编码下的总字节数,用DATALENGTH()配合正确的编码转换就行~

内容的提问来源于stack exchange,提问作者riad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:15:14