• 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存储过程遇到什么问题,就在使用文档或者注释里面加内容吧。

  • 相关阅读:
    PHP 框架详解 - Symfony 框架
    7.javase_数组1
    【Java 进阶篇】JQuery 遍历:发现元素的魔法之旅
    【数据结构回顾】
    基于遗传算法的大规模电动汽车充电行为优化
    LLVIP数据集下载
    zoj 1492 Maximum Clique
    计算机组成原理之初识计算机硬件,帮你拆开电脑看看里面的组成!!!
    Linux服务器搭建 -- SSH服务
    CGAL 读写.xyz格式的点云
  • 原文地址:https://blog.csdn.net/G11176593/article/details/126882887