记录一次工作中SQLServer查询异常的经历。

由于直连供应商那边要求使用sqlserver接收数据,故我们又在207安装了SQLServer数据库,我这边正常建表,然后导入数据,刚开始客户类型,厂家等字段使用常用字符串类型varchar,但是导入发现除数字和字母外,中文部分乱码,后来网上了解到,中文需用到Unicode字符集,故如果含有中文需要用nvarchar,以下是网上查找到varchar与nvarchar的区别:

改成nvarchar后,立马就正常了。

但是今天,同事突然找我说,这几个中文字段有些问题,无论是精准查询还是模糊匹配都查不到。以为是同步问题,我去海豚后台去看,同步条数都正常。

Navicat查询结果:

海豚后台同步日志:

然后直接去数据库中查找也的确有这个厂家的数据。这就很奇怪,后来在网上查到了原因,原来是SQLServer 排序规则的问题,以下是网上给出的解释:

然后我在字符串前加上N测试,果然是这个原因:

将数据库排序规则更改为 Chinese_PRC_CI_AS 后,不加N也可以查询的到了:

image-20240820152947559

最后附上更改数据库排序规则的SQL语句:

alter database [CustomerDB] collate Chinese_PRC_CI_AS;