增加 varchar 的大小显示正常,但不允许额外的大小

Posted

技术标签:

【中文标题】增加 varchar 的大小显示正常,但不允许额外的大小【英文标题】:Increasing size of varchar shows normal but will not allow the extra size 【发布时间】:2022-01-23 23:25:38 【问题描述】:

我们有一个 SQL Server 2012。

我没有构建与定制 GUI 一起使用的数据库。 GUI 链接到许多数据库(我无法访问除我之外的任何数据库),每个新数据库基本上都是信息的子域,并且创建方式相同。我在短时间内获得了将字段大小从 varchar 10 更改为 50 的权利并使用了:

ALTER TABLE tablename ALTER COLUMN column name VARCHAR (50)

在 MSSMS 中它显示 varchar(50) 但是当我尝试输入大于 10 的任何内容时,我得到一个 String or binary data would be truncated 错误

我不知道从哪里开始,也无法理解为什么它不允许大于 10,如果它被视为 50?

@dfundako 如果我尝试插入 '123456789' 它可以工作,如果我尝试 '12345678901234567890' 它会出错

谢谢

【问题讨论】:

您尝试输入的示例值是什么? 表上的任何触发器仍然使用较短的数据类型、插入或更新列或调用任何这样做的函数?还是计算列?也许是一些奇怪的检查约束? @sticky 我找不到,但也许我没有在正确的区域? select name, OBJECT_DEFINITION(object_id) from sys.triggers where parent_id = OBJECT_ID(N'tablename')select name, OBJECT_DEFINITION(object_id) from sys.check_constraints where parent_object_id = OBJECT_ID(N'tablename') 确保您已连接到正确的数据库。 【参考方案1】:

解决了这个问题。

感谢@Charlieface。

这是使用

找到的触发器
select name, OBJECT_DEFINITION(object_id) 
from sys.triggers 
where parent_id = OBJECT_ID(N'tablename')

该触发器中断了对该表的插入,并在另一个表中记录了对该列的更改。

我增加了那个表的(一个跟踪变化的)列的大小,问题就解决了。

谢谢:)

【讨论】:

以上是关于增加 varchar 的大小显示正常,但不允许额外的大小的主要内容,如果未能解决你的问题,请参考以下文章

QTable 允许调整列大小,但不小于内容

如何在oracle数据库中获取varchar2的声明大小

具有虚函数的类的大小增加了额外的4个字节

SQL Server:添加列会比预期增加表大小

MySQL 的最佳 varchar 大小是多少?

free():fclose 上的下一个大小(正常)无效。但不是在 Valgrind 运行时[重复]