版本: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的空格被截断了。
有人知道这是什么机制?翻了官方文档没找到。
可能在机制上来说,末尾空格就是直接截取不报错吧。另外需要注意的是nvarchar虽然是长度可变,但是最大长度约束是在你定义的3,超过3就错误。
可能sqlserver的内部机制吧,就像sqlserver查询不区分大小写一样
这么一对比好像有点道理,真的是内部机制么。
@jqw2009: 插入4个‘1’报错了,最多只能插入列定义大小3。
@SSSUUUU: 嗯,应该是内部机制吧,你插入的空格在查询一下是没有空格的,说明sql内部去除了空格
@jqw2009: 查询的是有空格的,他只是裁剪掉了超过3的空格,小于3的空格还保留
@SSSUUUU: 好吧,,,,,,