曾几何时刚进入这个行业的时候,那时候就是用ASP做网站,对于新闻内容,我们用得最多的就是Text与NText,从SQL97到SQL2000,那时候我一直用它。渐渐的,不再做网站了,一直都是做的信息系统,Text和Ntext用得比较少了。
随便SQL2005的出现,Nvarchar(max)走进了程序生活。记得刚出来的时候,微软很提倡使用它字段类型,那时候,觉得也无所谓。感觉上一样使用。
但是今天发生了一件很奇怪的事,我不知道是因为微软的BUG还是它的特性。
目前设计的一个系统,需要一个字段存放大量的Guid形式的字符串,如“10a9bc89-398b-47c3-b028-44ead644acb4”。
我们知道Ntext字段类型,在检查的时候比较麻烦,必须这样写CAST(Taker AS NVARCHAR) = '10a9bc89-398b-47c3-b028-44ead644acb4'
否则会报“数据类型text 和varchar 在equal to 运算符中不兼容”。
例如SQL文
select * from sprs_T_MESSAGENOTICE where MessageType='1' AND Taker = '10a9bc89-398b-47c3-b028-44ead644acb4'
这条记录其实是存在的,可是如果Taker是Ntext,它就查不到数据,如果我10a9bc89-398b-47c3-b028-44ead644acb4换成其它字符串,如“1”,它就查出来了
存放Guid形式的数据,它就是不行!
也不知道为什么会这样,不知道是不是微软的BUG,还是它的内部特性。咱也不深究了,没办法只能改用Nvarchar(max)了。