sqlserver的字符集配置

记录一点数据库的知识
背景:
1.echo命令可以将内容直接写到文本中,格式为:
echo [content] > [filepath]

一个大于号是创建文件,两个是append。

2.SqlServer提供了xp_cmdshell 可以直接调用外部shell,具体原理没看,但是要先启用这个功能
EXEC sp_configure 'xp_cmdshell', 1
,现在问题来了,用这种方式导出的时候会出现编码问题,出现乱码。

xp_cmdshell 'echo 我们的>c:\study\test.txt'

问题解决:
1. sqlserver支持多语言的,在management studio创建数据库时候点Options-->Collation,中文选择"Chinese_PRC_CI_AS",英文默认为SQL_Latin1_General_CP1_CI_AS,俄文为Cyrillic_General_CI_AS。如果在英文数据库表中存储中文,则查询结果是问号。
2.可以在插入时使用N'中文'的方式插入,则可以显示中文
3.NVarchar类型是按照一个字符两字节方式存储的
4.在存储过程中定义变量时,使用nvarchar,可以解决乱码问题,如DECLARE NAME nVARCHAR(32).当然,如果这些变量依赖了表中查询的数据,那么对应的那个数据应当和这个数据库的字符集相应。比如想从俄文字符集里面搞出中文来,即使放到nvarchar里面貌似也是不行的。


这些记录一下,有些可能还不透彻,甚至有问题,不过解决了当前问题。


英文系统下使用

xp_cmdshell 'chcp 65001|echo 我们的>c:\study\test.txt'
发现没起作用,发现和系统语言有很大关系,待研究补充

-------------------2014.11.11补充---------------

擦,刚打了一段,不小心按了esc全没了  日日  撤销也搞不回来

简单说吧:
Echo输出其他语言到文本只能是ANSI编码,但是可以使用chcp改变活动代码页(气氛上是字符集):http://blog.csdn.net/le5yo/article/details/6778095

简装的win7英文系统没中文字符,需要下补丁。在cmd里面如果敲chcp 936会报错

另外chcp65001 发现在存储过程里面调的时候还是会出现一点乱码,这个原因也没搞懂,如果输出量比较少,就没问题,生成的文件也是ANSI-UTF-8编码的。

可以在控制面板--区域和语言--管理--更改系统区域设置 里面设置语言(非当前系统语言)

只要cmd里面能显示字符正常,就能把这些字符正常的输出到文件里面,但是因为是ANSI编码的,所以在其他系统可能要用notepad++的encoding--character set--选择字符集,如果是俄文的话可以选择Cyrillic--OEM 866即可。

看其他帖子的忠告是
1.不要使用notepad(记事本),坑爹货
2.windows后来的powershell功能比较强大,提供了生成utf-8编码文本的一些工具(这个我没具体试)
3.和系统相关的编码问题太搞,毕竟不是windows大湿,如果sql存储过程遇到什么问题,就在使用文档或者注释里面加内容吧。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值