sql server必须在前面加N,才能查询出数据以及乱码等问题(Unicode字符串常量、&#8236)

如上图,在查询字段加上大写字母N,就能查询出结果。很多时候都是不用也能查询出数据,但是也有列外,

如下图:

1和2,3和4分别是相同的查询语句,但是1和2中只有2能查询出数据,3和4中只有4能查询出数据。

然而在1和3查询前分别加上大写的N就能查询出数据。一般查询中文,或不知原因的查询不出数据可以试试加上N。

简单了解下N的作用:

N‘zmdadmin’ 代表是一个Unicode字符常量(双字节,一个字符占两个字节),而没有N的代表字符常量(单字节,一个字符占一个字节)。

而中文一个汉字就要占两个字节,所以要用N'xxx'强制转换为Unicode编码的字符,从而避免乱码。但一般数据库默认编码及排序规则已经设置好了。

数据库从英文版或者改变默认编码时需注意原有已存在数据的编码。

---------------------------------------------------------------------------------------------------------------------------------------------

那原因很明显就是编码问题导致查询为空,但两句sql一模一样,而且即使从键盘重新输入1和3的zmdadmin也还是一样。

复制到网页input进行查询:

也未能查询出数据,但是有一个发现:输入的值和input的value值居然不一样,后面多了个&#8236

输入的值后面既没有空格也没有其他特殊字符,而且点击也选不中(又没有)此值【断点从后台跟踪,也看不到后面跟有&#8236,但实际是有,所以查询不出数据】

 

网上查询:https://blog.csdn.net/w390058785/article/details/80692930(他猜想字符&#8236字符是用于占位的?)。

其实&#8236是Unicode控制字符(就是特殊的Unicode字符),PDF:  让前面运算法则结束的字符。

很多时候input标签明明没有值也没有空格可总是不为空可考虑此问题。

 

 结论:导致两句一样sql或网页查询不出数据(不包括数据库编码及网页或系统其他问题),可考虑是由于字符串格式(复制操作)导致。具体可将字符串复制到网页input里检查。

上面操作中查询为空即为从Excel单元格复制的,至于键盘输入的那个zmdadmin是需要将username及后面的一起重新输入

 

posted @ 2019-04-04 16:24  liushuixiying  阅读(4151)  评论(1编辑  收藏  举报