社区
C++ Builder
帖子详情
字段中有汉字,为何用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';
为何出现怪事
...全文
1761
5
打赏
收藏
字段中有汉字,为何用SQL的WHERE语句检查不到?
SQL 2000 SERVER 建了一个数据库,表名 Nodes 有一个字段 NodeName, 类型为nvarchar(16) 字段内容 中有汉字: 我们 用SQL语句 select * from Nodes where NodeName='我们' 没法列出该记录,但内容为字母或数字就能成功检索到 select * from Nodes where NodeName='asdffff'; 为何出现怪事
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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 了。
MATLAB矩阵和数组运算.ppt
MATLAB矩阵和数组运算.ppt
网络幼教资源的查找与利用课件ppt.ppt
网络幼教资源的查找与利用课件ppt.ppt
大学数学实验MATLAB简介.ppt
大学数学实验MATLAB简介.ppt
通信工程施工成本控制.ppt
通信工程施工成本控制.ppt
嘉兴银行计算机辅助审计系统项目启动会.ppt
嘉兴银行计算机辅助审计系统项目启动会.ppt
C++ Builder
13,870
社区成员
102,693
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章