使用SQL database Migration wizard迁移数据库时的varchar中文乱码问题

最近遇到一个问题,是有一个SQL数据库的表用varchar存中文数据。在使用SQL Migration wizard迁移到Azure后,所有的中文都变成????了。但如果源表是nvarchar类型,则没有问题。


经过分析后,发现该问题的出现跟OS的文本编码有关。


首先,采用varchar存放中文数据并不推荐。SQL server存放varchar数据时,对英文采用1个字节存储,对其他语言采用2个字节存储。而且,存储其他语言(如中文)时,其编码方式是随意的。用户可以输入任何编码方式的字符进入该字段。而SQL server只是在数据库一级通过collation这个属性来标识数据库的语言信息。本例的collation是Chinese_RPC_CI_AS


如果用户写入数据时采用的编码和读出时采用的编码不同,就会导致乱码。因此,建议的方式是采用nvarchar来存储中文数据。nvarchar和varchar的区别是,其编码方式固定采用unicode. 这样就避免了编码不一致的问题


但是,如果已有数据库已经采用了varchar,又不想转换为nvarchar,该怎么办呢?我们在使用SQL database migration wizard时需要注意几个地方:

1.运行SQL database migration wizard的机器最好安装了中文包,而且必须配置非Unicode编码方式为中文。要注意,Azure上VM的缺省编码方式是英语,所以一定要修改

这样,当SQL database migration wizard把数据从源数据库导出时,就知道该采用哪种编码写入数据文件。


2.目标SQL Azure数据库在创建时,必须采用跟源数据库一样的collation


这样就可以解决中文字符乱码的问题了



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值