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

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



基于LOS算法+反步控制的水下航行器AUVUUV三维路径跟踪控制研究(Matlab代码实现)内容概要:本文研究基于LOS(Line-of-Sight)算法与反步控制相结合的水下航行器(AUV/UUV)三维路径跟踪控制方法,并提供了完整的Matlab代码实现。通过构建水下航行器的动力学模型,结合LOS导引策略实现路径跟踪,利用反步控制方法设计控制器以保证系统稳定性与跟踪精度,有效应对海洋环境中的外部干扰与模型不确定性。文中详细阐述了控制算法的设计过程、稳定性分析及仿真验证,展示了在复杂三维路径下的良好跟踪性能。; 适合人群:具备自动控制理论、非线性控制基础及Matlab/Simulink仿真能力的研究生、科研人员及从事水下机器人控制开发的工程技术人员。; 使用场景及目标:①用于水下无人航行器路径跟踪控制系统的算法设计与仿真验证;②学习LOS导引法与反步控制在非线性系统中的综合应用;③为海洋机器人运动控制、自动驾驶等领域提供技术参考与代码实现模板。; 阅读建议:建议结合控制理论基础知识,逐步理解LOS算法的几何原理与反步控制的递推设计思想,重点分析Lyapunov稳定性证明过程,并通过Matlab代码调试与仿真实验加深对算法性能的理解。

13,874

社区成员

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

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