字段中有汉字,为何用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';

为何出现怪事
...全文
1910 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 了。



代码下载链接: https://pan.quark.cn/s/7dbce75ef922 ### LM016L与LCD1602:精通字符型液晶显示技术#### 引言在嵌入式系统构建过程中,字符型液晶显示器(Character LCD)作为一种常见且高效的显示设备,被广泛应用于多种电子装置中,主要功能是呈现文本信息。在此领域内,**LM016L** 与 **LCD1602** 作为两种基于 **HD44780** 液晶控制芯片设计的典型型号,因其成本效益高、能耗低以及驱动简单等优势,备受工程师们的欢迎。本文将详细剖析LM016L与LCD1602的功能机制、内部构造,以及如何运用Keil51软件进行编程操控,旨在帮助读者全方位理解并熟练运用字符型液晶显示技术。#### 液晶显示技术解析液晶显示(Liquid Crystal Display,简称LCD)是一种借助液晶材料光学特性的改变来呈现图像的显示技术。字符型LCD,例如LM016L和LCD1602,主要由液晶面板、控制单元、驱动电路等构成,用于展示固定的字符和数字。它们通过接收微处理器发出的指令和数据,完成特定字符的显示。#### HD44780芯片详解HD44780芯片是由日本Hitachi公司研发的一种通用字符型液晶控制器,被大量应用于各类字符型LCD产品中。该芯片内部集成了DDRAM(Display Data RAM)、CGROM(Character Generator ROM)和CGRAM(Character Generator RAM)。这些核心组成部分分别负责存储显示数据、存储标准字符字模以及用户自定义字符字模的功能。- **DDRAM**:用于存储待显示的字符编码,总共包含80个字节,对应于屏幕上的显...

13,874

社区成员

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

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