Sql 避免在插入时插入空格
在SQL Server 2008中,我创建了下表:Sql 避免在插入时插入空格,sql,sql-server-2008,nvarchar,Sql,Sql Server 2008,Nvarchar,在SQL Server 2008中,我创建了下表: CREATE TABLE [Items]( [ID] [uniqueidentifier] NOT NULL, [Stock_ID] [uniqueidentifier] NOT NULL, [Code] [nvarchar](36) NOT NULL, [RFCODE] [nvarchar](24) NOT NULL ) 插入新行时: insert into Items values ('34438913
CREATE TABLE [Items](
[ID] [uniqueidentifier] NOT NULL,
[Stock_ID] [uniqueidentifier] NOT NULL,
[Code] [nvarchar](36) NOT NULL,
[RFCODE] [nvarchar](24) NOT NULL
)
插入新行时:
insert into Items
values ('34438913-6CB0-43AD-9DD5-5FBFFC60B313', '70667244-6F03-4113-930E-BF66CF1C29EE', 'MX7A386CHGR5WW', 'BE0000000000000000000162')
code
列的长度为36,这意味着SQL Server在MX7A386CHGR5WW
中添加了尾随空格
如何避免这种行为?(
code
列可以从10到36个字符不等)code
列的类型为nvarchar
,这意味着最多允许36个字符。如果输入长度小于36,它将不会填充,这是nchar
将要做的。否-SQL Server不会向定义为nvarchar
的列添加任何尾随空格
它将存储与您传入的字符数相同的字符数-不再存储
char
和nchar
数据类型将按照定义的长度进行填充-但不是(n)varchar
类型
如果在插入后运行此查询,您将看到您的语句是错误的:
SELECT
*, LEN(Code), '[' + Code + ']'
FROM Items
您将看到code
列的长度的14
,在code
列周围放上方括号清楚地显示未添加任何尾随空格
如果向表中添加类型为NCHAR(36)
的列
ALTER TABLE Items
ADD CodeFixed NCHAR(36)
然后将其值设置为MX7A386CHGR5WW
UPDATE Items
SET CodeFixed = 'MX7A386CHGR5WW'
WHERE ID = '34438913-6CB0-43AD-9DD5-5FBFFC60B313'
然后,当您检查时,您将看到nchar(36)
实际上是用空格填充到定义的最大长度:
SELECT
LEN(Code), '[' + Code + ']',
'[' + CodeFixed + ']'
FROM Items
否-SQL Server不会向定义为
nvarchar
的列添加任何尾随空格!!它将存储与您传入的字符数相同的字符数-不再存储!char
和nchar
数据类型将按照定义的长度进行填充,但(n)varchar
类型不会!据我所知,SQL将使用2个字节来存储列长度,然后每个字符使用2个字节(nvarchar)或每个字符使用1个字节(varchar)。没有填充。您如何得出长度为36的结论?通过查看表定义,或执行LEN(code)
?代码中的某个地方有一个bug,这里没有显示。