JH Pseudo Full Stack Engineer

一个关于ntext和nvarchar(MAX)的issue

2017-04-13
John He

最近在维护一个SQL Server数据库中发现一个问题。

nvarchar(MAX)存入中文时,显示为???乱码。

google了一番,将字段类型改成了ntext,存中文便没了问题。(这个改法其实是有问题的,后来一番google得知,ntext已经被遗弃不用了,都推荐使用nvarchar(MAX)了,但是为什么nvarchar(MAX)存入中文会显示???乱码,这个作为一个问题以后再研究)

但是该字段被改成了ntext后,造成了其他一些业务逻辑上的问题。

一番跟踪后,发现是一个Store Procedure用了如下语句做判断:

IF((SELECT SettingValue FROM bvc_WebSettings WHERE SettingName = 'xxx') = 1)

其中SettingValue正是被我改为ntext类型的字段。

字段类型改为ntext后,这个if里的语法就有问题了,原因是ntext不能直接和integer做比较。

需要更改为:

IF cast((SELECT SettingValue FROM bvc_WebAppSetting WHERE SettingName = 'xxx') as nvarchar(max)) = 1

Comments