SQL中搜索中文无效或Select中文变乱码

暗香疏影 创作者

当我们数据中含有中文,或我们想要Select出中文,当我去查询的时候默认情况下是无法搜索、无法显示的。
这是因为默认是不支持中文,只有NVARCHAR才支持中文
例子:

1
2
3
4

SELECT *
FROM [DataManagement].[PersonalDetails]
where ChineseName = '成龙'

这样是无法搜索出成龙的。

同理,以下查询也是无效的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
DECLARE @date1 DATE, @date2 DATE, @date3 DATE, @date4 DATE;

SET @date1=GETDATE();
SET @date2=CONCAT((Select CurrentAcademicYear
from SchoolDataManagement),'-09-01');
SET @date3=CONCAT(((Select CurrentAcademicYear
from SchoolDataManagement)+1),'-03-01');
SET @date4=CONCAT(((Select CurrentAcademicYear
from SchoolDataManagement)+1),'-08-01');



IF @date1=@date2
SELECT '第一学期' as SemesterName
ELSE
IF @date1>@date2 AND @date1 <@date3
SELECT '第一学期' as SemesterName
ELSE
IF @date1>@date3 AND @date1 <@date4
SELECT '第二学期' as SemesterName;

如果你SELECT ‘第一学期’ 即可发现,’第一学期’会变成????问号

解决办法

在冒号前添加N即可

1
2
3
SELECT *
FROM [DataManagement].[PersonalDetails]
where ChineseName = N'成龙'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
DECLARE @date1 DATE, @date2 DATE, @date3 DATE, @date4 DATE;

SET @date1=GETDATE();
SET @date2=CONCAT((Select CurrentAcademicYear
from SchoolDataManagement),'-09-01');
SET @date3=CONCAT(((Select CurrentAcademicYear
from SchoolDataManagement)+1),'-03-01');
SET @date4=CONCAT(((Select CurrentAcademicYear
from SchoolDataManagement)+1),'-08-01');



IF @date1=@date2
SELECT N'第一学期' as SemesterName
ELSE
IF @date1>@date2 AND @date1 <@date3
SELECT N'第一学期' as SemesterName
ELSE
IF @date1>@date3 AND @date1 <@date4
SELECT N'第二学期' as SemesterName;
  • 标题: SQL中搜索中文无效或Select中文变乱码
  • 作者: 暗香疏影
  • 创建于 : 2022-10-19 00:00:00
  • 更新于 : 2022-10-19 00:00:00
  • 链接: https://blog.23ikr.com/2022/10/19/2022-10-19-SQL-Chinese-Search/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论
目录
SQL中搜索中文无效或Select中文变乱码