sql server必須在前面加N,才能查詢出數據以及亂碼等問題(Unicode字符串常量、‬)


如上圖,在查詢字段加上大寫字母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及后面的一起重新輸入

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM