各位大哥救我!!--SqlServer对中文的搜索问题(再给75分) >>也就是不认识如下的select语句:>>select Age from UserTable where UserName='大哥'不認識是什麼意思?? 是出錯嗎? 還是說沒有用到index?? 如果是出錯,那錯誤信息是什麼? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你先試一下:Select * from UserTable where UserName Collate Chinese_PRC_CS_AS ='大哥'看行不行? Sorry,寫倒了。應該是Select * from UserTable where UserName ='大哥' Collate Chinese_PRC_CS_AS 说语法错误,incorrect syntax near Collate 不是吧,你的是不是SQL Server2000啊?我電腦上的能RUN的SQL:Select * from tblstock where PartRule ='插件' Collate Chinese_PRC_CS_AS 我是SQlserver 7.0, 不是说得很清楚吗 ?大哥! 查过了,7。0不认识这个collate那位大虾还有别的高见????急死我了~~~~ 查过了,7。0不认识这个collate那位大虾还有别的高见????急死我了~~~~ 会不会是代码页的问题?你的UserName是char或varchar吧(非unicode)?character set改为936如何? 用=注意一下前后有没有空格呀,用like ‘%大哥%’试一下就知道了 UserName是nvarchar改为936当然对了,但是在iso 8859-1的情况下难道就不能支持中文查询了吗?这不对呀。to: kanghl不是空格的问题,是编码的问题 select Age from UserTable where rtrim(ltrim(UserName))='大哥' 没错,但是我认为应该可以解决,就像java里面的getbyte() 改成Varchar不能输中文,没道理啊? 你的SQL是中文的吗?如果是,我不知道。如果不是,可能就是这个问题。执行语句是用ASCII码传给数据库,但英文数据库使用的是自己的编码方式。 最後一招,行則行,不行就沒法了。Select * from UserTable where Cast(UserName as varbinary) =Cast(N'大哥' as varbinary) 1.使用Unicode字段类型保存中文。2。使用N前缀查询中文数据:select * from tablename where fieldsname=N'中国' ~~~ 如果你使用uvarchar来存储你的数据,那么存储的数据跟字符集就没有关系了。不管你的字符集选什么,存在数据库中的unicode数据的值都是一样的。如果你select不出结果,主要是跟你查询分析器发给服务器的语句有关。如果你的操作系统不win2000,而且你的数据库也不是sqlserver2000,不自动支持unicode数据的话,你发给服务器的查询条件中的查询字符就会以数据库中的字符集为准,从而使查询条件和你需要的数据不匹配。解决办法就如 hydnoahark(诺亚方舟)说的,在查询条件的字符串前加上N. 谢谢!!!!我担心了两天,今天一来发现解决了。很感谢所有参与讨论的人。马上给分,有多有少,大家笑纳。再次谢谢大家。不过还是有点问题。to bluepower2008, uvarchar是不是写错了?是不是如果类型是nvarchar,存的就是unicode?to hydnoahark 1.使用Unicode字段类型保存中文。 方法是不是就是用nvarchar?? sorry,躺着打字,字母都倒了。应该是nvarchar,使用unicode就是字段定义为nchar,nvarchar或ntext。 安装SqlServer时,字符集选简体中文就可以了。 为什么提示列名文档无效呢? 两个表查询,如何让B表中没有的数据以空显示?有例子表,谢谢您 大哥大姐们,救命呀!! 话说 当在MySQL 中 操作两个表 返回一个记录集 当其中一个是从表并且为LOG的时候 asp向SQL存数据的问题 怎样向存储过程传递 时间??需不需要特定格式? 有沒有人可以邦我寫一個SQL 的函數... 一个难对应的考勤明细表的存储过程(400分的题,另开页加分300;完成后再加分,这个表对我来说太重要了,请来帮忙) 关于导入数据的问题 有关数据的导出 有SQL SERVER的高手吗? VFP问题,为什么老显示文件正在使用
Select * from UserTable where UserName Collate Chinese_PRC_CS_AS ='大哥'
看行不行?
應該是
Select * from UserTable where UserName ='大哥' Collate Chinese_PRC_CS_AS
我電腦上的能RUN的SQL:
Select * from tblstock where PartRule ='插件' Collate Chinese_PRC_CS_AS
那位大虾还有别的高见????
急死我了~~~~
那位大虾还有别的高见????
急死我了~~~~
改为936当然对了,但是在iso 8859-1的情况下难道就不能支持中文查询了吗?这不对呀。
to: kanghl
不是空格的问题,是编码的问题
执行语句是用ASCII码传给数据库,但英文数据库使用的是自己的编码方式。
Select * from UserTable where Cast(UserName as varbinary) =Cast(N'大哥' as varbinary)
2。使用N前缀查询中文数据:
select * from tablename where fieldsname=N'中国'
~~~
不管你的字符集选什么,存在数据库中的unicode数据的值都是一样的。
如果你select不出结果,主要是跟你查询分析器发给服务器的语句有关。如果你的操作系统不win2000,而且你的数据库也不是sqlserver2000,不自动支持unicode数据的话,你发给服务器的查询条件中的查询字符就会以数据库中的字符集为准,从而使查询条件和你需要的数据不匹配。
解决办法就如 hydnoahark(诺亚方舟)说的,在查询条件的字符串前加上N.
我担心了两天,今天一来发现解决了。
很感谢所有参与讨论的人。
马上给分,有多有少,大家笑纳。
再次谢谢大家。
不过还是有点问题。
to bluepower2008,
uvarchar是不是写错了?是不是如果类型是nvarchar,存的就是unicode?
to hydnoahark
1.使用Unicode字段类型保存中文。
方法是不是就是用nvarchar??