创建表导入数据后,查询结果无法正常显示,求大神指点

Neo_whl 2013-10-09 11:17:50

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,除了这个问题,数据类型和字符长度都够了啊,当然数字可以正常显示,一旦涉及汉字或者字符等就是如上图效果了,请遇到此类问题的大神指点迷津?

但我通过附加的一个数据库,里面运行上述语句,查询结果正常。

...全文
229 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
Neo_whl 2013-10-11
  • 打赏
  • 举报
回复
引用
代码修改一下 SQL code ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 --在我的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 select N'热火',N'负' go --现在虽然原始列的排序规则是 Greek_CS_AI --而当前数据库的排序规则是Chinese_PRC_CI_AS,但数据照样能正常显示 select * from test /* 队伍 胜负 湖人 胜 马刺 胜 太阳 负 马刺 负 热火 胜 湖人 胜 太阳 负 热火 负 */
谢谢,按你的做法问题可以解决,我回头再看下以后是不是创建表,字段数据类型后不会都要加 collate Chinese_PRC_CI_AS这个吧?这样就麻烦了点,应该有对整个数据库设置一下就可以吧
_小黑_ 2013-10-10
  • 打赏
  • 举报
回复
数据库这都是高手啊
王者天杰 2013-10-10
  • 打赏
  • 举报
回复
汉字前最好加 N !
zhonggs54 2013-10-10
  • 打赏
  • 举报
回复
膜拜楼上的大神
  • 打赏
  • 举报
回复
代码修改一下


--在我的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
select N'热火',N'负' 
go
 
--现在虽然原始列的排序规则是 Greek_CS_AI
--而当前数据库的排序规则是Chinese_PRC_CI_AS,但数据照样能正常显示
select *
from test
/*
队伍	胜负
湖人	胜 
马刺	胜 
太阳	负 
马刺	负 
热火	胜 
湖人	胜 
太阳	负 
热火	负 
*/
 
  • 打赏
  • 举报
回复
这种情况之前也碰到过,主要是排序规则不一样导致的,还是需要把数据类型改为nvarchar和nchar。 下面是一个实验,还原问题,以及解决问题:


--在我的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
select N'热火',N'负' 
go
 
--现在虽然原始列的排序规则是 Greek_CS_AI
--而当前数据库的排序规则是Chinese_PRC_CI_AS,但数据照样能正常显示
select *
from test
/*
队伍	胜负
湖人	胜 
马刺	胜 
太阳	负 
马刺	负 
热火	胜 
湖人	胜 
太阳	负 
热火	负 
*/
 
發糞塗牆 2013-10-10
  • 打赏
  • 举报
回复
排序规则不能随便改的
Landa_Jimmy 2013-10-10
  • 打赏
  • 举报
回复
你看看你附件的那个数据库的排序规则:右击→属性→常规→维护下颚排序规则。 在看看你当前数据库的排序规则,把当前数据库的排序规则设置成附件的那个数据库的排序规则。

--
ALTER DATABASE DEV_SIMENS SET SINGLE_USER WITH ROLLBACK IMMEDIATE

ALTER DATABASE DEV_SIMENS SET multi_USER

use master 
go
alter database DEV_SIMENS collate Chinese_PRC_CI_AI 
go
Landa_Peter 2013-10-10
  • 打赏
  • 举报
回复
看看这个
發糞塗牆 2013-10-10
  • 打赏
  • 举报
回复
初步预测是你的os语言与sqlserver的不同,假设一个是繁体,一个是简体,用Unicode类型即可,我这里假设你的长度足够,如果换了Unicode不够的话,就加长吧,注意数据那里也加了N create table test (队伍 Nvarchar(6),胜负 Nchar(2)) 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 select N'热火',N'负' go
Neo_whl 2013-10-10
  • 打赏
  • 举报
回复
引用
-- ALTER DATABASE DEV_SIMENS SET SINGLE_USER WITH ROLLBACK IMMEDIATE ALTER DATABASE DEV_SIMENS SET multi_USER use master go alter database DEV_SIMENS collate Chinese_PRC_CI_AI go
感谢,回家看看!
Neo_whl 2013-10-10
  • 打赏
  • 举报
回复
代码修改一下


SQL code?123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 --在我的sql server 2008上 create table test (  队伍 varchar(6) collate Greek_CS_AI, --这个排序规则是随便选了一个的  胜负 char(2) collate Greek_CS_AI     --用来模拟你原来数据库的排序规则 ) go    insert into test select '湖人','胜' union allselect '马刺','胜' union allselect '太阳','负' union allselect '马刺','负' union allselect '热火','胜' union allselect '湖人','胜' union allselect '太阳','负' union allselect '热火','负' 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 allselect N'马刺',N'胜' union allselect N'太阳',N'负' union allselect N'马刺',N'负' union allselect N'热火',N'胜' union allselect N'湖人',N'胜' union allselect N'太阳',N'负' union allselect N'热火',N'负' go    --现在虽然原始列的排序规则是 Greek_CS_AI --而当前数据库的排序规则是Chinese_PRC_CI_AS,但数据照样能正常显示 select * from test /* 队伍    胜负 湖人    胜  马刺    胜  太阳    负  马刺    负  热火    胜  湖人    胜  太阳    负  热火    负  */  
万分感谢前辈,如此细腻的阐述,下班回家试试!
Neo_whl 2013-10-09
  • 打赏
  • 举报
回复

34,576

社区成员

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

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