zoukankan      html  css  js  c++  java
  • 注意:在SQL SERVER中使用NChar、NVarchar和NText

      天天蹲在园子里看别人的,自己好久好久没写新随笔啦~~先感慨下,大家不要扔砖头哈!

      言归正传,前天同事在帮客户录数据的时候,发现有一个人的名字里有个“”(念jie,同“洁”)字,但用搜狗拼音和万能五笔都打不出来,我百度了一下,找到了一篇搜狗论坛的建议帖,有人建议搜狗拼音里增加“

    ”字的输入,下面跟帖的人贴出了这个“㛃”字。

      既然字已经找到,我以为一切OK了,把它复制到飞秋里发给同事,竟然显示的是“?”!这是一个神马情况啊?

      我立马又去翻那个帖子,在下面看到了论坛版主的回复:

       貌似是编码的问题啊,我又把它复制到一个新建的记事本里,保存的时候果然出现了提示:

      果然是编码的问题啊!这时候,我突然想到,存放姓名的字段用的是varchar型,它能不能存这个字呢?一试,果然也是一个问号!改用nvarchar型字段来存,果断是没问题的。查了下SQL SERVER联机丛书,看到varchar同nvarchar的区别:

      除下列情况之外,ncharnvarcharntext 的使用分别与 charvarchartext 的使用相同:

      • Unicode 支持更大范围的字符。
      • 存储 Unicode 字符需要更大的空间。
      • nchar 列的最大大小为 4,000 个字符,与 charvarchar 不同,它们为 8,000 个字符。
      • 使用最大说明符,nvarchar 列的最大大小为 2^31-1 字节。有关 nvarchar(max) 的详细信息,请参阅使用大值数据类型。
      • Unicode 常量以 N 开头指定:N'A Unicode string'。
      • 所有 Unicode 数据使用由 Unicode 标准定义的字符集。用于 Unicode 列的 Unicode 排序规则以下列属性为基础:区分大小写、区分重音、区分假名、区分全半角和二进制。

      SQL SERVER里建表,我一直用的都是varchar,总感觉nvarchar除了存储中文的时候在长度和字符数上有统一性的好处之外,基本没有什么需要用到的地方。这回得了教训,以后再有录入人名或是其他可能出现GBK不包含的生僻字的字段,最好还是使用nchar、nvarchar或ntext,以免在后面给程序留坑。

      PS:感谢dreamhappy同学的提醒,使用SQL语句在nvarchar类型的列中INSERT或UPDATE数据时,最好在字符串前面加上N,如:insert into table(a) values(N''),不然超出GBK的汉字插入数据库中依然会显示成“?”号。如果谁有能省写N的方法,请在评论中说一下,谢谢!

  • 相关阅读:
    A visual proof that neural nets can compute any function 2
    Matrix
    Formula
    ID and CLASS
    hugeng007_diary01_the living way
    the mathematical knowledge
    sys.argv[]
    The Convolutional Networks
    DVWA之XSS (跨站脚本攻击)存储型+反射型。
    DVWA之 File Inclusion 文件包含
  • 原文地址:https://www.cnblogs.com/aaa6032/p/2632063.html
Copyright © 2011-2022 走看看