当前位置: 主页 > 数据库

非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

标库网数据怎么样_非unicode数据库_纯真ip库数据

create table #temp( firstName varchar(10) ) insert into #temp select '䅇' union all

标库网数据怎么样_纯真ip库数据_非unicode数据库

select '库' ; select * from #temp

显示结果如下,“䅇(su)”字显示不正确,而是一个问号“?” 出现。

纯真ip库数据_标库网数据怎么样_非unicode数据库

分析原因

SQL Server 使用 Unicode 编码的数据类型(如 NCHAR、NVARCHAR)来支持包括中文在内的亚洲语言。 在查询代码中,数据类型必须是 Unicode 编码的数据类型。 但是上面的示例代码中使用的数据类型是VARCHAR,所以查询结果是乱码。

非unicode数据库_纯真ip库数据_标库网数据怎么样

解决方案

解决查询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

标库网数据怎么样_非unicode数据库_纯真ip库数据

DROP TABLE #temp GO create table #temp( firstName nvarchar(10) ) insert into #temp

非unicode数据库_标库网数据怎么样_纯真ip库数据

select N'䅇' union all select N'库' ; select * from #temp

显示结果如下,正确查询出“䅇(su)”字。

标库网数据怎么样_纯真ip库数据_非unicode数据库