【问题标题】:VARCHAR Length is -1 in dbeaver. Why?VARCHAR 长度在 dbeaver 中为 -1。为什么?
【发布时间】:2021-01-05 12:12:28
【问题描述】:

我正在使用 MSSQL 数据库并使用 dbeaver 作为数据库管理器。我发现一个声明为 VARCHAR 且长度为 (-1) 的字段代表什么?

dbeaver 版本为 7.3.2.202101032114。最新的

【问题讨论】:

  • 可以是 VARCHAR(max) 字段吗?
  • 看起来是 DBeaver 的问题,这已在 V 7.3.2 中修复
  • 在模型定义中是一个TEXT字段@Mark Rotteveel
  • 它是真的 text 专栏,@Poode 吗?该数据类型在 16 年前已被弃用...您现在应该 long 开始使用 varchar(MAX)。然而,我也怀疑它是一个text 列,因为text 列的max_length不是 -1(它是16)。
  • 然而,这与数据库后端 @Poode 无关;那是前端。 DBeaver 报告-1,因为这就是SQL Server 表示MAX 长度的方式;如我的回答所示。

标签: sql-server dbeaver


【解决方案1】:

MAX 数据长度在系统对象中定义为-1。因此,一些应用程序会将长度报告为-1,而不是MAX

例如:

USE tempdb;
GO

CREATE TABLE dbo.TestTable (varcharColMAX varchar(MAX),
                            nvarcharColMAX nvarchar(MAX),
                            varbinaryColMAX varbinary(MAX),
                            varcharCol10 varchar(10),
                            nvarcharCol10 nvarchar(10),
                            varbinaryCol10 varbinary(10));
SELECT c.name,
       c.max_length
FROM sys.tables t
     JOIN sys.columns c ON t.object_id = c.object_id
WHERE t.[name] = 'TestTable';

DROP TABLE dbo.TestTable;

哪些输出:

name             max_length
---------------- ----------
varcharColMAX    -1
nvarcharColMAX   -1
varbinaryColMAX  -1
varcharCol10     10
nvarcharCol10    20
varbinaryCol10   10

请注意,nvarcharCol10 的长度为 20,因为 max_length 以字节为单位报告大小,单个 nvarchar 字符的长度为 2 个字节(2 * 10 = 20)。 em>

【讨论】:

  • 是的,你在我的数据库中是对的,我发现 [Comment] [varchar](max) 谢谢 Larnu
猜你喜欢
  • 1970-01-01
  • 2010-09-26
  • 2021-02-22
  • 1970-01-01
  • 2015-10-19
  • 1970-01-01
  • 1970-01-01
  • 2021-01-29
  • 1970-01-01
相关资源
最近更新 更多