比如表TABLE1列 COL1(NVARCHAR),COL2(NVARCHAR),...
如果COL1列数据是空字符(''),
SELECT * FROM TABLE1 WHERE COL1=N'???'
???表示乱码的意思。查询结果:
包含所有COL1列数据为''的行。为什么会有如此现象?请高手分析一下问题
如果COL1列数据是空字符(''),
SELECT * FROM TABLE1 WHERE COL1=N'???'
???表示乱码的意思。查询结果:
包含所有COL1列数据为''的行。为什么会有如此现象?请高手分析一下问题
----------------------------------------
SELECT * FROM TABLE1 WHERE COL1=N''
SELECT * FROM TABLE1 WHERE COL1=N'???'
麻烦版主看清楚一下先,上面两句是一样的?(???表示中文乱码。)
本身就是乱的。所以筛选的话,也就筛出来了。
SELECT * FROM USER WHERE USERNAME=N'����'
SELECT * FROM USER WHERE USERNAME=N''
两个语句结果居然是一样的.
/*
----------- ----------- ----------- ----------- -----------
32 NULL 32 63 63(1 行受影响)
*/
插入USERNAME的时候用的是N''(空字符).
SELECT * FROM USER WHERE USERNAME=N'����'
SELECT * FROM USER WHERE USERNAME=N''
两个语句结果居然是一样的.
/*
----------- ----------- ----------- ----------- -----------
32 NULL 32 63 63(1 行受影响)
*/
乱码都是63,所以???还是����都一样,可是空字符串不一样,这就比较奇怪了。
SELECT UNICODE(COL1) AS [UNICODE(COL1)],UNICODE(N'����') AS [UNICODE(N'����')],COL1,N'����' AS [N'����'] FROM table1 WHERE COL1=NCHAR(65518)
/*
UNICODE(COL1) UNICODE(N'����') COL1 N'����'
------------- ---------------- ---- -------(0 個資料列受到影響)
*/SELECT UNICODE(COL1) AS [UNICODE(COL1)],UNICODE(N'����') AS [UNICODE(N'����')],COL1,N'����' AS [N'����'] FROM table1 WHERE COL1=NCHAR(65519)
/*UNICODE(COL1) UNICODE(N'����') COL1 N'����'
------------- ---------------- ---- -------
NULL 65533 ����
NULL 65533 ����
NULL 65533 ����(3 個資料列受到影響)
*/SELECT UNICODE(COL1) AS [UNICODE(COL1)],UNICODE(N'����') AS [UNICODE(N'����')],COL1,N'����' AS [N'����'] FROM table1 WHERE COL1=NCHAR(65535)
/*
UNICODE(COL1) UNICODE(N'����') COL1 N'����'
------------- ---------------- ---- -------
NULL 65533 ����
NULL 65533 ����
NULL 65533 ����(3 個資料列受到影響)
*/SELECT UNICODE(COL1) AS [UNICODE(COL1)],UNICODE(N'����') AS [UNICODE(N'����')],COL1,N'����' AS [N'����'] FROM table1 WHERE COL1=NCHAR(65536)
/*
UNICODE(COL1) UNICODE(N'����') COL1 N'����'
------------- ---------------- ---- -------(0 個資料列受到影響)*/
當Unicode在 65519 到 65535 之間 編譯器會把它和空字符串匹配。???不是很理解这个,请指教