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

时间:2015-02-02 19:25:51

标签: javascript python mysql sql-server

我有一个用户用来发送消息的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()返回的值(它们也返回值)彼此相似)。

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

2 个答案:

答案 0 :(得分:1)

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

SQL服务器将'\ r \ n'计为两个字符。

我的解决方案是使用

之类的东西计算字符数
LEN(REPLACE(the_string, CHAR(13), ''))

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

stackoverflow entryone给了我很多帮助。

答案 1 :(得分:0)

我无法与MySQL通话。对于SQL Server:

LEN()函数告诉您字符串中存在多少个字符,不包括尾随空格。 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')