日期:2014-05-18 浏览次数:20501 次
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?**FD 2?*FD* */ DROP TABLE TBTEST