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

  • 相关阅读:
    MAUI Android 关联文件类型
    Redux和@reduxjs/toolkit的使用
    Kubectl 使用详解——k8s陈述式资源管理
    基于安卓平台的校园社交app设计
    挑选适合您的优秀项目管理软件
    HTML和CSS篇章高频面试题【2023】
    【历史上的今天】9 月 22 日:2017 年图灵奖得主诞生;计算机软件知识产权保护案;施乐公司的自我毁灭
    python机器学习:集成算法与随机森林(5)
    【数据处理】Python:实现求条件分布函数 | 求平均值方差和协方差 | 求函数函数期望值的函数 | 概率论
    学生宿舍管理系统(前端java+后端Vue)实现-含前端与后端程序
  • 原文地址:https://blog.csdn.net/G11176593/article/details/126882887