怪事!插入一条超过字段长度的记录,数据库没有报错!

2021-01-13 18:39发布

版本:SQL Server 2016

--创建数据库(字段大小为3)
CREATE TABLE [dbo].[test] ([a] nvarchar(3))

--插入长度超过3的字符串,报错。
INSERT INTO test VALUES('1111111111');
--[Err] 22001 - [SQL Server]String or binary data would be truncated.

--插入长度超过3的字符串 (成功插入,没报错!!!)
INSERT INTO test VALUES('1 ');

--查看数据库该记录是'1 ',发现长度超过3的空格被截断了。

有人知道这是什么机制?翻了官方文档没找到。

标签:
2条回答
The star\"
2楼-- · 2021-01-13 18:55

可能sqlserver的内部机制吧,就像sqlserver查询不区分大小写一样

查看更多
贪生不怕死
3楼-- · 2021-01-13 19:22

可能在机制上来说,末尾空格就是直接截取不报错吧。另外需要注意的是nvarchar虽然是长度可变,但是最大长度约束是在你定义的3,超过3就错误。

查看更多
登录 后发表回答