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

2023-03-03 20:00:42 浏览数 (1)

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

代码语言:javascript复制

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

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

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

代码语言:javascript复制
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即可

代码语言:javascript复制
SELECT *
  FROM [DataManagement].[PersonalDetails]
  where ChineseName = N'成龙'
代码语言:javascript复制
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; 

0 人点赞