varchar主键多个空格怎么还说重复主键?立即结贴! 只有一个主键,是varchar格式,第一行是112233,第二行是112233 (后面多个空格),插入失败,说是主键重复怎么设置才能允许这样的“重复”?坐等,立即结贴。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 sql server2000 提示重复,sybase12不提示重复,我要重sybase导数据至sqlserver2000,前提是不能改结构和数据。 char 型估计不行,这样的话还会自动补空格 drop table ttcreate table tt(zhujian varchar(200) primary key) insert into tt values ('123')insert into tt values (' 123')insert into tt values (' 123'+'$$')insert into tt values (' 123 '+'$$')insert into tt values (' 123 '+'$$')select * from tt update ttset zhujian =REPLACE(zhujian,'$$','')select * from tt最后再跟新回去 你想象力很丰富,但是不行,我刚试过了,虽然我明知不管insert还是update,都是不允许这样重复的。但是看到你的想象力,我还是再试了一次 没有用的,比较时尾随空格全被忽略declare @1 varchar(10), @2 varchar(10)set @1 = '123'set @2 = '123 'if @1 = @2 print '='else print '<>'另想办法,char(9)制表符代替空格就可以区分开来了。 程序是别人的,我动不了,我只是做一个数据备份至sqlserver的软件,要求当然是和原来的结构一致、数据不做修改最好了。 你是说录入数据不代码去除前后空格,再加上Sybase认为后面多个空格就不算重复,这样一个场景极不合理?还是我希望SqlServer也像Sybase一样区分空格,这个场景不合理? 针对的是设计,不管是sybase也好,SQL Server也好,应该禁止头尾带空格的字符串做为主键,估且不说不同系统环境不能直接兼容问题,就是肉眼看去读数据也是不易读取的。当然,希望SqlServer也像Sybase一样区分空格,这个需求我认为合理。 很难,在SQL中,varchar类型其实是变形。比如varchar(50),它是说最大50字符,还有一个意思它是50个字符。当我输入111222333时,感觉它就是这个111222333,如果我们在加上3个空格,感觉应该是11122233+3空格。但是2个实际是一样的。为什么?因为在SQL数据库中是这样的。定了50.实际就是50个字符。输入111222333后,不足50字符。系统就自动把后面的补位,用空格补足50.也就一样了。和char的原理一样的。只是可能在内存中存储部一样吧(我猜的).但是在具体处理时就自动忽略了空格。我平时写程序时。遇到这个东西。string str1=“jinyuttt”,和数据库读出的字符串string str2=数据库读出的jinyuttt不相等。必须调用去空格函数处理str2才相等。 我认为varchar 忽略空格正是SQL server 的优点 主键是否重复取决于字段的排序规则varchar本身就是忽略空格的,用其它排序规则可能也没用,建议用其它方法区分 SQL SERVER 的VARCHAR(N) 和NVARCHAR(N),VCHAR(N) 和NCHAR(N)的存储区别建议楼主翻翻书,这是基础知识,用不着来问。 建该字段里面的内容都加一个结束符。比如:个人设定$结束123$123 $是不一样的这里的$也可以是换行符制表符 CHAR(9) 换行符 CHAR(10) 回车 CHAR(13) #18楼,你的看法不对,Varchar(50)可以存后续空格,能检测出来,可以存与主键一致性判断是两码事#22楼,可以存与主键一致性判断是两码事,看清楚题目再来。#21楼,我觉得你说的跟排序规则有关应该是对的,我正在从这方面思考。 我将主键的排序规则改了一下,但是仅仅能改进大小写、全角半角区分的情况,例如原先aa 和 AA 被认为是主键重复,排序规则上勾选区分大小写后,aa 和 AA 被认为是不重复。但是末尾空格的区分,没找到地方 关于默认实例和命名实例的访问 新手提问,联合查询 如何截取字符串中的中文字符 sql语句 请问如何使用T-SQL语句执行DTS包 8g内存,sqlserver怎么就使用了这么一点点 如何把如下ASP函数改为sql server中自定义函数? SQL Server2000 里的中文为什么都显示为“????” 将一个数据库中一张表的数据分拆到另个数据库的多张表中的语句 如何进行表的读取锁定 t-sql decimal和numric详解 简单SQL语句 下班结帖!
create table tt
(
zhujian varchar(200) primary key
)
insert into tt values ('123')
insert into tt values (' 123')
insert into tt values (' 123'+'$$')
insert into tt values (' 123 '+'$$')
insert into tt values (' 123 '+'$$')
select * from tt
set zhujian =REPLACE(zhujian,'$$','')
select * from tt
最后再跟新回去
set @1 = '123'
set @2 = '123 'if @1 = @2 print '='
else print '<>'
另想办法,char(9)制表符代替空格就可以区分开来了。
varchar本身就是忽略空格的,用其它排序规则可能也没用,建议用其它方法区分
123$
123 $是不一样的
这里的$也可以是换行符
制表符 CHAR(9)
换行符 CHAR(10)
回车 CHAR(13)
#22楼,可以存与主键一致性判断是两码事,看清楚题目再来。#21楼,我觉得你说的跟排序规则有关应该是对的,我正在从这方面思考。
aa 和 AA 被认为是主键重复,排序规则上勾选区分大小写后,aa 和 AA 被认为是不重复。
但是末尾空格的区分,没找到地方