日期:2014-05-17 浏览次数:20435 次
create table test
(队伍 varchar(6),胜负 char(2))
go
insert into test
select '湖人','胜' union all
select '马刺','胜' union all
select '太阳','负' union all
select '马刺','负' union all
select '热火','胜' union all
select '湖人','胜' union all
select '太阳','负' union all
select '热火','负'
go
select * from test
查询结果如下:
问题:
这是什么情况,我用的sql2005,除了这个问题,数据类型和字符长度都够了啊,当然数字可以正常显示,一旦涉及汉字或者字符等就是如上图效果了,请遇到此类问题的大神指点迷津?
但我通过附加的一个数据库,里面运行上述语句,查询结果正常。
--在我的sql server 2008上
create table test
(
队伍 varchar(6) collate Greek_CS_AI, --这个排序规则是随便选了一个的
胜负 char(2) collate Greek_CS_AI --用来模拟你原来数据库的排序规则
)
go
insert into test
select '湖人','胜' union all
select '马刺','胜' union all
select '太阳','负' union all
select '马刺','负' union all
select '热火','胜' union all
select '湖人','胜' union all
select '太阳','负' union all
select '热火','负'
go
select * from test
/*
队伍 胜负
?? ?
?? ?
?? ?
?? ?
?? ?
?? ?
?? ?
?? ?
*/
--之所以显示出这样是由于你新的服务器上的排序规则是Chinese_PRC_CI_AS
--所以就不能正常显示了。
--那怎么办呢?
--这个时候修改列的排序规则,或者把数据类型修改为nvarchar,也没什么效果
alter table test alter column 队伍 varchar(6) collate Chinese_PRC_CI_AS
alter table test alter column 胜负 char(2) collate Chinese_PRC_CI_AS
--显示还是不正常
select 队伍,
胜负
from test
/*
队伍 胜负
?? ?
?? ?
?? ?
?? ?
?? ?
?? ?
?? ?
?? ?
*/
drop table test
--通过nvarchar和nchar类型,能比较好的解决问题
create table test
(
队伍 nvarchar(6) collate Greek_CS_AI, --这个排序规则是随便选了一个的
胜负 nchar(2) collate Greek_CS_AI --用来模拟你原来数据库的排序规则
)
go
insert into test
select N'湖人',N'胜' union all
select N'马刺',N'胜' union all
select N'太阳',N'负' union all
select N'马刺',N'负' union all
select N'热火',N'胜' union all
select N'湖人',N'胜' union all
select N'太阳',N'负' union all