【问题标题】:SQL Server DataLength issuesSQL Server 数据长度问题
【发布时间】:2022-12-08 10:01:46
【问题描述】:

我有一列包含以下数据:SMITH SMITH SMITH SMITH SMITH。从表中执行 SELECT DATALENGTH 时,我得到的值为 72。

但是,当我复制列数据并将其弹出到如下所示的 select 语句中时,我得到的长度为 36。

SELECT DATALENGTH('JUDITH KOSGEY JUDITH JEPKORIR KOSGEY')

可能的原因是什么?我没有在本文中看到任何额外的空格或特殊字符。

【问题讨论】:

  • 如果你做CONVERT(varbinary(150),YourColumn),你会得到什么?
  • @larnu 0x4A0055004490049004800480048004B004B004F004F005300477004590045900590020004a005500444900480048004800480020004AA,
  • 我用SELECT DATALENGTH(N'JUDITH KOSGEY JUDITH JEPKORIR KOSGEY'); 得到 72。请注意 Unicode 常量前缀,因此该列似乎是 nvarchar
  • 那不是'SMITH SMITH SMITH SMITH SMITH'....它是N'JUDITH KOSGEY JUDITH JEPKORIR KOSGEY'...即使它是'JUDITH KOSGEY JUDITH JEPKORIR KOSGEY'也会返回DATALENGTH36不是29...
  • @Larnu 我已经编辑了我的问题。我看到我复制了不正确的值。应该是 JUDITH KOSGEY JUDITH JEPKORIR KOSGEY

标签: sql sql-server datalength


【解决方案1】:

如果你的列是NVARCHAR,它是用来处理双字节字符集的。

使用LEN(<column>) 而不是DATALENGTH(<column>),您将获得您期望的值。

【讨论】:

    【解决方案2】:

    这可能是因为数据列是 UNICODE,每个字符占用更多存储空间。列的类型是什么?

    【讨论】:

    • 仅此一项是不够的,N'SMITH SMITH SMITH SMITH SMITH' 会有一个 DATALENGTH58
    猜你喜欢
    • 1970-01-01
    • 2011-12-18
    • 2013-09-18
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多