首页 新闻 搜索 专区 学院

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

0
悬赏园豆:10 [已解决问题] 解决于 2021-01-13 19:19

版本: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的空格被截断了。

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

SSSUUUU的主页 SSSUUUU | 初学一级 | 园豆:192
提问于:2021-01-12 19:53
< >
分享
最佳答案
0

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

收获园豆:5
PER10 | 初学一级 |园豆:31 | 2021-01-12 20:04
其他回答(1)
0

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

收获园豆:5
jqw2009 | 园豆:2412 (老鸟四级) | 2021-01-13 08:55

这么一对比好像有点道理,真的是内部机制么。

支持(0) 反对(0) SSSUUUU | 园豆:192 (初学一级) | 2021-01-13 08:59

@jqw2009: 插入4个‘1’报错了,最多只能插入列定义大小3。

支持(0) 反对(0) SSSUUUU | 园豆:192 (初学一级) | 2021-01-13 09:37

@SSSUUUU: 嗯,应该是内部机制吧,你插入的空格在查询一下是没有空格的,说明sql内部去除了空格

支持(0) 反对(0) jqw2009 | 园豆:2412 (老鸟四级) | 2021-01-13 09:40

@jqw2009: 查询的是有空格的,他只是裁剪掉了超过3的空格,小于3的空格还保留

支持(0) 反对(0) SSSUUUU | 园豆:192 (初学一级) | 2021-01-13 09:46

@SSSUUUU: 好吧,,,,,,

支持(0) 反对(0) jqw2009 | 园豆:2412 (老鸟四级) | 2021-01-13 09:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册