字段中有汉字,为何用SQL的WHERE语句检查不到?

BCBPLC 2010-05-17 11:04:13
SQL 2000 SERVER
建了一个数据库,表名 Nodes
有一个字段 NodeName, 类型为nvarchar(16)

字段内容 中有汉字: 我们
用SQL语句
select * from Nodes where NodeName='我们'

没法列出该记录,但内容为字母或数字就能成功检索到

select * from Nodes where NodeName='asdffff';

为何出现怪事
...全文
1081 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
托塔雨天王 2011-07-25
  • 打赏
  • 举报
回复 2
字段内容 中有汉字: 我们
用like 别用=
select * from Nodes where NodeName like '%我们%'
BCB 2010-05-17
  • 打赏
  • 举报
回复
宽串的缘故
BCBPLC 2010-05-17
  • 打赏
  • 举报
回复 1
nvarchar是UNICODE编码,
所以常数汉字串前要加 N'这是汉字串'
BCBPLC 2010-05-17
  • 打赏
  • 举报
回复
解决了!
BCBPLC 2010-05-17
  • 打赏
  • 举报
回复
比如 select @status = N'stopped'

那么其中的字符串 stopped 前面为什么要加 N 呢?而且我们发现有些地方加 N 与否都没有影响,有些地方又必须加 N。

N 在这里表示 Unicode,就是双字节字符。对于西文字符,用一个字节来存储过足够了,对于东方文字字符,就需要两个字节来存储。Unicode 为了统一、规范、方便、兼容,就规定西文字符也用两个字节来存储。

也就是说加 N 就表示字符串用 Unicode 方式存储。

但有时候加与不加都一样,又是什么原因呢?这是由于自动转换造成的。

比如:
declare @status nvarchar(20)
select @status = N'stopped'
select @status = 'stopped'

实际上上述两句赋值的结果是一样的,因为变量类型就是 nvarchar(Unicode 类型)。

而有些地方(比如:sp_executesql 的参数)不能自动转换,所以需要加 N 了。



13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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