RDS SQL SERVER 解决中文乱码问题

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: # 问题引入 这天老鸟又开始纠缠着菜鸟:“菜鸟啊,我们最近遇到一个RDS SQL Server 2008 R2的奇怪的问题,我们的生僻字写入到RDS SQL Server中,查询结果展示出来是乱码呀?你去解决下这个问题吧。”。 “可是,鸟哥,我最近在做关于SQLTest的系列文章啊,暂时抽不出。。。。。。”。 “那个暂时先放放,这个比较紧急,尽快,立刻,马上去复盘并解决掉,Under

问题引入

这天老鸟又开始纠缠着菜鸟:“菜鸟啊,我们最近遇到一个RDS SQL Server 2008 R2的奇怪的问题,我们的生僻字写入到RDS SQL Server中,查询结果展示出来是乱码呀?你去解决下这个问题吧。”。
“可是,鸟哥,我最近在做关于SQLTest的系列文章啊,暂时抽不出。。。。。。”。
“那个暂时先放放,这个比较紧急,尽快,立刻,马上去复盘并解决掉,Understand?”。还没等菜鸟说完,老鸟已经迫不及待的发号施令了。

复盘分析

看到老鸟为这事着急上火的样子,菜鸟已经意识到问题的严重性,于是放下手中的活,赶紧投入到这个问题的复盘分析中来。

复盘

经过一番翻云覆雨的研究后,菜鸟拿出了复盘的例子来,参见下面的代码:

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

查询结果如下图所示:
01.png

分析

从查询结果展示来看,生僻字“䅇 (su)” 的确显示为乱码问号(?)。菜鸟终于复盘了老鸟说得场景,但是他还是高兴不起来。难道RDS SQL Server 2008R2真如鸟哥所说,对生僻字不支持吗?高端大气上档次的阿里云RDS SQL Server不至于吧?随着研究的深入,菜鸟渐渐的找到问题的根本原因:
SQL Server是使用Unicode编码的数据类型来支持中文的,比如:NCHAR, NVARCHAR等数据类型,类似的语言还有拉丁语系,和包含中文在内的亚洲语言。所以,要解决这问题,我们的数据类型选择就必须是Unicode编码的数据类型,很显然复盘例子中的数据类型VARCHAR选择错误,我们只需要将这个数据类型修改为NVARCHAR,即可解决问题了。

解决问题

在正确分析了问题所在以后,解决问题就变得很简单了,参见下面的测试代码:

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

测试结果展示
02.png
从结果展示来看,生僻字“䅇 (su)”已经可以成功展示出来了,这里需要特别强调两点,否则很有可能展示出来还是乱码:

  • 数据类型选择请务必使用Unicode编码格式的类型,这里选择的是NVARCHAR。
  • 在向Unicode编码格式的数据类型插入数据时,需要使用前置词N。N前置词代表的是 SQL-92标淮中的国家语言,且N必须为大写。如果您没有在Unicode字串常数前面加上N做为前置词,则SQL Server会在使用字串前,先将其转换成目前资料库的非Unicode 字码页。

写在最后

至此,菜鸟成功复盘并解决了RDS SQL Server 2008 R2遭遇生僻字乱码的问题。又开始回过头来继续SQLTest系列,革命尚未成功,同志还需努力。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
SQL 缓存 监控
【巡检问题分析与最佳实践】RDS SQL Server 空间使用问题
实例的空间使用率是RDS SQL Server用户日常需要重点关注的监控项之一。如果实例的存储空间完全打满,将会导致严重的影响,包括:数据库无法写入、数据库备份无法正常完成、存储空间扩容任务的执行耗时可能更长等。
【巡检问题分析与最佳实践】RDS SQL Server 空间使用问题
|
SQL 负载均衡 关系型数据库
RDS 发布 SQL Server AlwaysOn集群版
信息摘要: RDS 发布 SQL Server AlwaysOn 集群版,支持创建只读实例,实现业务读写分离架构适用客户: 使用SQL Server的客户,客户对数据库有读写分离的需求,期望利用只读实例实现读业务的分离,如数据的统计智能分析、业务热点流量分担等。
1528 0
|
SQL 监控 关系型数据库
RDS for SQL server 空间问题排查汇总
SQL server的空间问题一直有客户在询问,今天就给大家汇总讲解下SQL server 的全部空间开销。 SQL server 的空间组成 从文件类型来看,SQL server 的文件类型分数据文件(MDF,NDF),日志文件(LDF) 从数据库来看分为系统数据库和用户数据库,其中系统数据库中,最容易出现空间问题的,就是临时数据库(tempdb) 下面我们将分别来研究下空间的常见问题和解决方法。
9927 0
|
SQL 监控 关系型数据库
RDS For SQL Server备份恢复到本地
RDS For SQL Server备份恢复到本地
3309 0
|
SQL 关系型数据库 数据库
RDS For SQL Server链接服务器
RDS For SQL Server链接服务器支持及限制
2148 0
|
SQL 关系型数据库 测试技术
使用RDS for SQL Server的一些最佳实践
#了解RDS的概念 这也是第一条,也是最重要的一条,在使用某项产品和服务之前,首先要了解该产品或服务的**功能**与**限制**,就像你买一个冰箱或洗衣机,通常也只有在阅读完说明书之后才能利用起来它们的所以功能,以及使用时的注意事项,RDS for SQL Server也是如此。 RDS for SQL Server与传统的自建机房提供SQL Server的主要不同就是用
2216 0
|
SQL 关系型数据库 数据库
RDS SQL Server 创建数据库关系图(Database Diagrams)
背景介绍     SQL Server 关系图是一个非常简单易用且方便的工具,可以直观的把数据库中表之间的关系展现出来,不用手动整理或者写脚本整理各个表之间的关系,如下图。     RDS SQL Server 2008 R2由于权限的限制,默认是不支持创建关系图的。但是,近期遇到一些客户,同一个实例中,同一个账号,在两个数据库DB1和DB2都是
2323 0
|
SQL 关系型数据库 数据库连接
SQL Server 云下数据增量同步至阿里云 RDS for SQL Server
SQLServer 云下数据增量同步至阿里云 RDS for SQLServer
3099 0
|
SQL 关系型数据库 RDS
RDS SQL Server死锁(Deadlock)系列之二使用Profiler捕获死锁
# 问题引入 不管是RDS SQL Server还是自建SQL Server数据库,死锁的确是一个非常头疼的问题,上一篇文章我们已经谈到了[使用DBCC捕获死锁](https://yq.aliyun.com/articles/73856?spm=5176.8091938.0.0.rjljJx)。这篇文章是以阿里云RDS客户遇到的死锁问题为背景,分享死锁文章系列之二使用Profiler捕获死锁。
6373 0