求助关于sql插入字符串,末尾空格被自动清除的问题

qq_21420725 2017-09-28 04:02:45
发现就是insert into的时候
假如字符串 'A '后面是两个空格。。插入后查询表。。发现有可能3个结果
'A '后面是两个空格
'A '后面是一个空格
'A '后面是没有空格
网上查了下。都说是因为类型选择了varchar的原因。。SQL插入时会自动清除末尾空格,但是没说怎么解决啊。。。
我的字符串的类型是nvarchar的。。。
同时也有看到说改成char就可以的帖子。。但是后面人家楼主说改成char后照样会自己清空。

求助怎么保证后面2个空格保留。字符串完整的插入表中
...全文
997 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2017-10-09
  • 打赏
  • 举报
回复
你的语句如果是查询时出现这类情况,引擎匹配满足条件(条件空格数必须时<数据的空格数
吉普赛的歌 版主 2017-10-09
  • 打赏
  • 举报
回复
楼主检查下程序里有没有在插入前 Trim 字符串首尾空格的操作吧
道素 2017-10-09
  • 打赏
  • 举报
回复
如果你插入数据的值确实有空格,不会被自动trim掉,举例:

if object_id('temdb..#t') is not null drop table #t
create table #t(s nvarchar(100))
insert into #t
select replicate(' ',sv.number)
from master.dbo.spt_values as sv where sv.type='P' and sv.number <20

select datalength(s) as len,len(s) TrimSpaceLen,'A'+s+'B' as s from #t

  	len	TrimSpaceLen	s
1	0	0	AB
2	2	0	A B
3	4	0	A  B
4	6	0	A   B
5	8	0	A    B
6	10	0	A     B
7	12	0	A      B
8	14	0	A       B
9	16	0	A        B
10	18	0	A         B
11	20	0	A          B
12	22	0	A           B
13	24	0	A            B
14	26	0	A             B
15	28	0	A              B
16	30	0	A               B
17	32	0	A                B
18	34	0	A                 B
19	36	0	A                  B
20	38	0	A                   B

  • 打赏
  • 举报
回复
引用1楼数据 测试,并没有删除多余空格
if OBJECT_ID ('Tempdb..#tmp') is not null drop table #tmp
create table #tmp(
    tId int identity(1,1) primary key not null,
    tCol nvarchar(100) null
)
 
insert into #tmp (tCol)
                select 'a'
    union all    select 'b '
    union all    select 'c  '
    union all    select 'c                   '
     
select *, datalength(tCol) tCol_Len from #tmp
tId	tCol	tCol_Len
1	a	2
2	b 	4
3	c  	6
4	c                   	40
二月十六 版主 2017-09-28
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#A') is null
drop table #A
Go
Create table #A(col nvarchar(100))
Insert #A
select N'A ' union all
select N'A ' union all
select N'A'
GO
--测试数据结束
SELECT *
FROM #A;

nvarchar后边的空格不会清空,楼主可以试一下,把A数据复制出来,后边有空格。
顺势而为1 2017-09-28
  • 打赏
  • 举报
回复
用Tab的空格才会保留, 空格键的会自动清除 .
qq_21420725 2017-09-28
  • 打赏
  • 举报
回复
[quote=引用 1 楼 Imaor 的回复:] 有点没看懂 ,你这样也是直接插入啊。。没什么区别啊,如何能保证后面的空格不会被自动删掉? 变量@a 然后set @a='A ' insert into #tmp (tCol) values (@a)
OwenZeng_DBA 2017-09-28
  • 打赏
  • 举报
回复
直接是空格没法保留,说下你为什么要保留这个空格呢
IEEE_China 2017-09-28
  • 打赏
  • 举报
回复

if OBJECT_ID ('Tempdb..#tmp') is not null drop table #tmp
create table #tmp(
	tId int identity(1,1) primary key not null,
	tCol nvarchar(100) null
)

insert into #tmp (tCol)
				select 'a'
	union all	select 'b '
	union all	select 'c  '
	union all	select 'c                   '
	
select *, '['+tCol+']' as N't' from #tmp



Id         tCol                                                                                                 t
----------- ---------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------
1           a                                                                                                    [a]
2           b                                                                                                    [b ]
3           c                                                                                                    [c  ]
4           c                                                                                                    [c                   ]

(4 行受影响)

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧