非unicode数据库-标库网数据怎么样
发布时间:2023-02-11 07:05 浏览次数:次 作者:佚名
用户查询SQL Server表中的生僻字时,查询结果出现乱码。 本文分析了出现该问题的原因及解决方法。
问题重现示例
执行以下代码查询SQL Server表中的稀有字符“䅇(su)”。
use tempdb
go
IF OBJECT_ID('#temp', 'U') IS NOT NULL
DROP TABLE #temp
GO
create table #temp(
firstName varchar(10)
)
insert into #temp
select '䅇'
union all
select '库'
;
select * from #temp
显示结果如下,“䅇(su)”字显示不正确,而是一个问号“?” 出现。
分析原因
SQL Server 使用 Unicode 编码的数据类型(如 NCHAR、NVARCHAR)来支持包括中文在内的亚洲语言。 在查询代码中,数据类型必须是 Unicode 编码的数据类型。 但是上面的示例代码中使用的数据类型是VARCHAR,所以查询结果是乱码。
解决方案
解决查询SQL Server表生僻字时的乱码问题,只需要将上述示例代码中的数据类型改为Unicode编码格式的数据类型即可(以下示例使用NVARCHAR)。
另外,为了避免乱码非unicode数据库,向Unicode编码的数据类型插入数据时,需要加上前缀N。 前缀N代表SQL-92标准中的国家语言,N必须大写。 如果不在Unicode字符串的常量前加N作为前缀非unicode数据库,SQL Server会在使用前将该字符串转换为当前数据库的非Unicode代码页。
脚步
将上例中的数据类型从VARCHAR改为NVARCHAR,执行以下代码查询SQL Server表中的生僻字“䅇(su)”。
use tempdb
go
IF OBJECT_ID('#temp', 'U') IS NOT NULL
DROP TABLE #temp
GO
create table #temp(
firstName nvarchar(10)
)
insert into #temp
select N'䅇'
union all
select N'库'
;
select * from #temp
显示结果如下,正确查询出“䅇(su)”字。