sql排序规则问题

clqcdgood 2008-09-22 09:15:56
某个表A上的某个字段B,的排序规则为Latin1_General_BIN,字段中保存中文、英文字符

我使用查询select * from A where B like '%key%'
只能查询到英文字符

使用下面语句也不行
select * from A where B COLLATE Chinese_PRC_CI_AS like '%key%'

怎么样才能查询到中文字符呢?


...全文
962 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ny-6000 2008-10-28
  • 打赏
  • 举报
回复
LZ咋没出来说句话呢?

ken2002 2008-10-28
  • 打赏
  • 举报
回复
学习!
街坊跳舞 2008-10-28
  • 打赏
  • 举报
回复
select cast( 列名 as binary ) as 列名 from 表名 where 查询条件

这样你看看某个具体的返回结果是什么,这是存在数据库中的二进制格式;之后你可以对照下各字符编码表,看看是什么编码,然后就自己转换成汉字。

转换方法 windows下搜索 WideCharToMultiByte 函数 和 MultiByteToWideChar函数的用法
linux_ch 2008-09-23
  • 打赏
  • 举报
回复
問題已經很明確了,你現在的表裏面有沒有中文?
hyde100 2008-09-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 fcuandy 的回复:]
入库都没能存为中文编码,latin1字符集里找不到中文字符全存成乱码或?了,再如何指定环境没有用的。

道理跟给一个长度为10的varchar变量赋个30长的字串一样,入时都没有入上,查时又怎么能查出来。

不要加条件,自己直接 select * from a 看看就知道了。
[/Quote]

修改数据库的字符集
nalnait 2008-09-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 fcuandy 的回复:]
入库都没能存为中文编码,latin1字符集里找不到中文字符全存成乱码或?了,再如何指定环境没有用的。

道理跟给一个长度为10的varchar变量赋个30长的字串一样,入时都没有入上,查时又怎么能查出来。

不要加条件,自己直接 select * from a 看看就知道了。
[/Quote]赞同
水族杰纶 2008-09-22
  • 打赏
  • 举报
回复
sql排序规则
如果要是区分大小写的话,就要改变数据库的排序规则。

1、查看系统中所支持的全部排序规则列表

SELECT * FROM ::fn_helpcollations()

2、查看当前系统的排序规则.

SELECT SERVERPROPERTY('Collation')

3、改变数据库的排序规则(做ALTER之前,要中断所有用户对此数据库的访问)

语法:
use master
go
ALTER DATABASE 数据库名 COLLATE 排序规则名
例子:
use master
go
ALTER DATABASE luwanzhufa COLLATE Chinese_PRC_CS_AS

* 我查过。Chinese_PRC_CS_AS这个是简体中文。而且区分大小写的排序规则。

192 Japanese_BIN 二进制顺序、用于 932(日文)字符集。
193 Japanese_CI_AS 字典顺序、不区分大小写、用于 932(日文)字符集。
200 Japanese_CS_AS 字典顺序、区分大小写、用于 932(日文)字符集。
198 Chinese_PRC_BIN 二进制顺序、用于 936(简体中文)字符集。
199 Chinese_PRC_CI_AS 字典顺序、不区分大小写、用于 936(简体中文)字符集。
203 Chinese_PRC_CS_AS 字典顺序、区分大小写、用于 936(简体中文)字符集。
hyw595589440 2008-09-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 fcuandy 的回复:]
入库都没能存为中文编码,latin1字符集里找不到中文字符全存成乱码或?了,再如何指定环境没有用的。

道理跟给一个长度为10的varchar变量赋个30长的字串一样,入时都没有入上,查时又怎么能查出来。

不要加条件,自己直接 select * from a 看看就知道了。
[/Quote]

同意
fcuandy 2008-09-22
  • 打赏
  • 举报
回复
入库都没能存为中文编码,latin1字符集里找不到中文字符全存成乱码或?了,再如何指定环境没有用的。

道理跟给一个长度为10的varchar变量赋个30长的字串一样,入时都没有入上,查时又怎么能查出来。

不要加条件,自己直接 select * from a 看看就知道了。
dawugui 2008-09-22
  • 打赏
  • 举报
回复
同意三楼的.
set language 'Simplified Chinese'
select * from A where B like '%key%'

或者
set language 'Simplified Chinese'
select * from A where charindex('key',B) > 0
-晴天 2008-09-22
  • 打赏
  • 举报
回复
试试这个:
set language 'Simplified Chinese'
select * from A where B like '%key%'
df398286232 2008-09-22
  • 打赏
  • 举报
回复
查不出来?
如一楼说的,b里有没有中文字符。
fcuandy 2008-09-22
  • 打赏
  • 举报
回复
b里有没有中文字符,或者说有没有正确存储中文字符都是问题,你select查下看。

Latin1_General_BIN排序规则不支持中文。所以你存进去的都是乱码

34,590

社区成员

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

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