为什么SQL返回的字符串长度与其他语言返回的字符串长度不同?

2024-06-14 22:17:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个用户用来发送消息的web应用程序。在

问题是消息中的字符数 确定发送消息的成本。在

我注意到javascript UI代码计算 字符很好,但是DBMS的内置函数 有时返回更高数量的字符。在

这是一个字符串的例子 行为:

String with different lengths..
This string has different lengths depending on the programming language use to count the characters.

Transact SQL LEN() and MySQL LENGTH() return 217.

Python len() returns 212.

Javascript和Python中的标准字符串长度函数返回的值相似,但低于Transact-SQL的LEN()和DATALENGTH()以及MySQL的length()返回的值(它们也返回彼此相似的值)。在

那么为什么会有不同的价值观呢?在


Tags: the函数字符串用户web应用程序消息sql
2条回答

我注意到只有当字符串中有换行符时才会发生这种情况。在

SQL server将'\r\n'计为两个字符。在

我的解决方案是用

LEN(REPLACE(the_string, CHAR(13), ''))

在计算字符串长度之前去掉回车符。在

这个stackoverflow entry和这个{a2}对我帮助很大。在

我不能和MySQL说话。对于SQL Server:

函数的作用是:告诉您字符串中有多少个字符,不包括后面的空格。 DATALENGTH()告诉您给定字符串占用了多少空间。对于varchar数据类型,这将是每个字符1个字节。对于nvarchar数据类型,它是每个字符两个字节。请注意,在使用DATALENGTH()时,它确实计算空白。下面是一些示例,展示了使用不同字符串和数据类型的这两个函数

select 
    LenTrailingSpace = len(' abc '),
    LenNoTrailingSpace = len(' abc'),
    DatalengthTrailingSpace = datalength(' abc '),
    DatalengthNoTrailingSpace = datalength(' abc'),
    UnicodeDatalengthTrailingSpace = datalength(N' abc '),
    UnicodeDatalengthNoTrailingSpace = datalength(N' abc')

相关问题 更多 >