SqlServer 查询遇到特殊字符 '?',无法查询到记录
查询语句如下 where ID = '2?**'
只要条件字符中包含? 字符,就查询不到结果。
[解决办法]
try
where ID = N'2?**'
[解决办法]
where id = N'2?**'
[解决办法]
9楼的测试根本就不对。
首先,?这个字符,不被中文字符集所支持, 所以在中文操作系统上安装的sqlserver如果用默认排序规则chinese_rpc...,且用text,char,varchar之类数据类型,那么写入?这个字符时,写入就是乱码。
9楼自己可以试一下,
SELECT * FROM TBTEST WHERE CHARINDEX('?',ID)>0
是不是跟你上面那句查到的结果一样?
楼主要想查到正确的结果, 做法无非两种:
1,存储数据时,不考滤排序规则,但用unicode方式编码,即字段用nvarchar,nchar,ntext之类,赋值时加N前辍,比如:
CREATE TABLE TBTEST(ID NVARCHAR(10))INSERT TBTEST VALUES(N'AFD2?**')INSERT TBTEST VALUES(N'2FD?**')INSERT TBTEST VALUES(N'FDRE2?**')INSERT TBTEST VALUES(N'2?FD**')INSERT TBTEST VALUES(N'2?**FD')INSERT TBTEST VALUES(N'2?*FD*')INSERT TBTEST VALUES(N'24546564**')SELECT * FROM TBTEST WHERE CHARINDEX(N'?',ID)>0/*AFD2?**2FD?**FDRE2?**2?FD**2?**FD2?*FD**/DROP TABLE TBTEST