varchar 和 nvarchar区别:

varchar(n)
长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。

nvarchar(n)
包含 n 个字符的可变长度 Unicode 字符数据。n 的值必须介于 1 与 4,000 之间。字节的存储大小是所输入字符个数的两倍。

两字段分别有字段值:我和coffee
那么varchar字段占2×2+6=10个字节的存储空间,而nvarchar字段占8×2=16个字节的存储空间。

如字段值只是英文可选择varchar,而字段值存在较多的双字节(中文、韩文等)字符时用nvarchar

上面是一个总结介绍,通过上面的介绍,可以知道。

varchar(4) 可以输入4个字线,也可以输入两个汉字

nvarchar(4) 可以输四个汉字,也可以输4个字母,但最多四个 

char、varchar 最多8000个英文、最多4000个汉字 (2G) 按字节存储

nchar、nvarchar 最多4000个字符  按字符存储

一个汉字==两个字节

一个标点符号==一个字节

一个字母==一个字节

一个字节==一个字符

ASCII==一个字节

(1)       定义:

char:    固定长度,存储ANSI字符,不足的补英文半角空格。

nchar:   固定长度,存储Unicode字符,不足的补英文半角空格

varchar:  可变长度,存储ANSI字符,根据数据长度自动变化。

nvarchar: 可变长度,存储Unicode字符,根据数据长度自动变化。

nvarchar(n) :包含 n个字符的可变长度 Unicode 字符数据。n 的值必须介于 1  与  4,000 之间。字节的存储大小是所输入字符个数的两倍。所输入的数据字符长度可以为零。

varchar[(n)]:长度为 n 个字节的可变长度且非 Unicode的字符数据。n 必须是一个介于   1 和 8,000之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。所输入的数据字符长度可以为零。

注意: ANSI主要是以单字节来存储数据,一般适合英文。而我们常用的汉字需要用两个字节来存储,所以就要使用unicode的数据类型,不然读取出来的数据可能会乱码。

(2)区别:

①从存储方式上,nvarchar是按字符存储的,而 varchar是按字节存储的;

②从存储量上考虑, varchar比较节省空间,因为存储大小为字节的实际长度,而 nvarchar是双字节存储;

③在使用上,如果存储内容都是英文字符而没有汉字等其他语言符号,建议使用varchar;含有汉字的使用nvarchar,因为nvarchar是使用Unicode编码,即统一的字符编码标准,会减少乱码的出现几率;

④   如果你做的项目可能涉及不同语言之间的转换,建议用nvarchar。

(3)优缺点:

Nvarchar优点:判断字符串的时候可以不需要考虑中英文两种字符的差别,可以避免程序中乱码的问题。

缺点:存储英文字符会增大一倍的存储空间.但是在存储代价已经很低廉的情况下,优先考虑兼容性会给你带来更多好处的,效率没有varchar高。

(4)为什么要用nvarchar?

有n前缀的,n表示Unicode字符,即所有字符都占两个字节,nchar,nvarchar

字符中,英文字符只需要一个字节存储就足够了,但汉字众多,需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。

(5)有关var的简单介绍:

有var前缀的,表示是实际存储空间是变长的,varchar,nvarchar

所谓定长就是长度固定的,当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充,使长度达到相应的长度;而变长字符数据则不会以空格填充,比较例外的是,text存储的也是可变长。

(6)如何使用这些类型?

如果你肯定存储的数据长度,而且不包中文的,可以选择char类型。

如果肯定存储的数据长度,但可能包括中文,可以选择nchar类型。

如果不确定存储的数据长度,存储只有英文、数字的最好用varchar

如果不确定存储的数据长度,也有可能有中文,可以选择nvarchar类型,在SQL Server2005中也是比较常用的字符数据类型。

sqlserver 查找某个字段在哪张表里

  1. select [name] from [库名].[dbo].sysobjects where id in(select id from [库名].[dbo].syscolumns Where name='字段名')

  查询表的字段说明

  1. --查询表的字段说明
  2. --use dataname -----数据库名
  3. SELECT t.[name] AS 表名,c.[name] AS 字段名,cast(ep.[value]
  4. as varchar(100)) AS [字段说明]
  5. FROM sys.tables AS t
  6. INNER JOIN sys.columns
  7. AS c ON t.object_id = c.object_id
  8. LEFT JOIN sys.extended_properties AS ep
  9. ON ep.major_id = c.object_id AND ep.minor_id = c.column_id WHERE ep.class =1
  10. AND t.name='CN_PG'--------表名

  快速查看表结构(比较全面的)

  1. --快速查看表结构(比较全面的)
  2. SELECT CASE WHEN col.colorder = 1 THEN obj.name
  3. ELSE ''
  4. END AS 表名,
  5. col.colorder AS 序号 ,
  6. col.name AS 列名 ,
  7. ISNULL(ep.[value], '') AS 列说明 ,
  8. t.name AS 数据类型 ,
  9. col.length AS 长度 ,
  10. ISNULL(COLUMNPROPERTY(col.id, col.name, 'Scale'), 0) AS 小数位数 ,
  11. CASE WHEN COLUMNPROPERTY(col.id, col.name, 'IsIdentity') = 1 THEN '√'
  12. ELSE ''
  13. END AS 标识 ,
  14. CASE WHEN EXISTS ( SELECT 1
  15. FROM dbo.sysindexes si
  16. INNER JOIN dbo.sysindexkeys sik ON si.id = sik.id
  17. AND si.indid = sik.indid
  18. INNER JOIN dbo.syscolumns sc ON sc.id = sik.id
  19. AND sc.colid = sik.colid
  20. INNER JOIN dbo.sysobjects so ON so.name = si.name
  21. AND so.xtype = 'PK'
  22. WHERE sc.id = col.id
  23. AND sc.colid = col.colid ) THEN '√'
  24. ELSE ''
  25. END AS 主键 ,
  26. CASE WHEN col.isnullable = 1 THEN '√'
  27. ELSE ''
  28. END AS 允许空 ,
  29. ISNULL(comm.text, '') AS 默认值
  30. FROM dbo.syscolumns col
  31. LEFT JOIN dbo.systypes t ON col.xtype = t.xusertype
  32. inner JOIN dbo.sysobjects obj ON col.id = obj.id
  33. AND obj.xtype = 'U'
  34. AND obj.status >= 0
  35. LEFT JOIN dbo.syscomments comm ON col.cdefault = comm.id
  36. LEFT JOIN sys.extended_properties ep ON col.id = ep.major_id
  37. AND col.colid = ep.minor_id
  38. AND ep.name = 'MS_Description'
  39. LEFT JOIN sys.extended_properties epTwo ON obj.id = epTwo.major_id
  40. AND epTwo.minor_id = 0
  41. AND epTwo.name = 'MS_Description'
  42. WHERE obj.name = 'CN_PG'--表名
  43. ORDER BY col.colorder ;

  表结构查询

  1. --SQLServer根据表明查询表的外键关系
  2. SELECT 主键列ID=b.rkey
  3. ,主键列名=(SELECT name FROM syscolumns WHERE colid=b.rkey AND id=b.rkeyid)
  4. ,外键表ID=b.fkeyid
  5. ,外键表名称=object_name(b.fkeyid)
  6. ,外键列ID=b.fkey
  7. ,外键列名=(SELECT name FROM syscolumns WHERE colid=b.fkey AND id=b.fkeyid)
  8. ,级联更新=ObjectProperty(a.id,'CnstIsUpdateCascade')
  9. ,级联删除=ObjectProperty(a.id,'CnstIsDeleteCascade')
  10. FROM sysobjects a
  11. join sysforeignkeys b on a.id=b.constid
  12. join sysobjects c on a.parent_obj=c.id
  13. where a.xtype='f' AND c.xtype='U'
  14. and object_name(b.rkeyid)='TABLE_PMD_TPP_TRAITS'

  

  1. 获取SqlServer中表结构
  2. SELECT syscolumns.name,systypes.name,syscolumns.isnullable, syscolumns.length
  3. FROM syscolumns, systypes
  4. WHERE syscolumns.xusertype = systypes.xusertype
  5. AND syscolumns.id = object_id('你的表名')

  

  1. --单独查询表递增字段 select [name] from syscolumns where id=object_id(N'你的表名') and COLUMNPROPERTY(id,name,'IsIdentity')=1

  

  1. --获取表主外键约束 exec sp_helpconstraint '你的表名' ;

  

2019-2-20Sqlserver数据库中char、varchar、nchar、nvarchar的区别及查询表结构的更多相关文章

  1. SQL中 char varchar和nvarchar的区别

    转至:http://www.cnblogs.com/carekee/articles/2094676.html char    char是定长的,也就是当你输入的字符小于你指定的数目时,char(8) ...

  2. SQL Server char,varchar,nchar,nvarchar区别

    SQL Server char,varchar,nchar,nvarchar区别 (1)       定义: char:    固定长度,存储ANSI字符,不足的补英文半角空格. nchar:   固 ...

  3. 数据库char varchar nchar nvarchar,编码Unicode,UTF8,GBK等,Sql语句中文前为什么加N(一次线上数据存储乱码排查)

    背景 公司有一个数据处理线,上面的数据经过不同环境处理,然后上线到正式库.其中一个环节需要将数据进行处理然后导入到另外一个库(Sql Server).这个处理的程序是老大用python写的,处理完后进 ...

  4. sql server数据库中char、nchar、varchar、nvarchar的选择

    在数据库中,字符型的数据是最多的,可以占到整个数据库的80%以上.为此正确处理字符型的数据,对于提高数据库的性能有很大的作用. 在字符型数据中,用的最多的就是Char与Varchar两种类型.前面的是 ...

  5. 数据库中char, varchar, nvarchar的差异

    char     char是定长的,也就是当你输入的字符小于你指定的数目时,char(8),你输入的字符小于8时,它会再后面补空值.当你输入的字符大于指定的数时,它会截取超出的字符.    nvarc ...

  6. sql server数据库中char,varchar,nvarchar字段的区别

    Char,varchar,nvarchar字段是sql server数据库中的三种字段类型.好多人在选择存储的时候不知道如何抉择,我给大家讲下这个三个字段类型的区别. Char(n)是长度为n个字节的 ...

  7. 【转】CHAR CHARACTER VARCHAR NCHAR NVARCHAR NVARCHAR2区别

    http://blog.csdn.net/lhl6688/article/details/44156823?ref=myread oracle提供了五种字符数据类型:char.nchar.varcha ...

  8. 数据库之char vchar nchar nvchar的区别

    转自:http://blog.csdn.net/a11112244444/article/details/51475107 首先介绍一下定长或变长 所谓定长就是长度固定的,当输入的数据长度没有达到指定 ...

  9. Oracle数据库中char, varchar, nvarchar的差异

    1. char      固定长度,最长n个字符.   2. varchar      最大长度为n的可变字符串. (n为某一整数,不同数据库,最大长度n不同)   char和varchar区别:   ...

随机推荐

  1. URL传递中文参数乱码问题

    web项目开发中,经常遇到中文参数乱码问题,而且有时候明明测试服务器上好用,换个正式环境就不用的情况也经常出现,今天做一个记录,防止自己以后忘记 1.地址栏url请求带中文参数 这类

  2. python中logger模块的应用

    logger模块是python内置的一个模块,主要用于输出运行日志,可以输出日志的等级,日志的保存路径等 具体详见博客https://www.cnblogs.com/qianyuliang/p/723 ...

  3. 四大解析器(BeautifulSoup、PyQuery、lxml、正则)性能比较

    用标题中的四种方式解析网页,比较其解析速度.当然比较结果数值与电脑配置,python版本都有关系,但总体差别不会很大. 下面是我的结果,lxml xpath最快,bs4最慢 ==== Python v ...

  4. 第十一节:Bundles压缩合并js和css及原理分析

    一. 简介 1.背景:浏览器默认一次性请求的网络数是有上限的,如果你得js和css文件太多,就会导致浏览器需要多次加载,影响页面的加载速度, MVC中提供Bundles的方式压缩合并js和css,是M ...

  5. Scrapy 下载图片

    参考 : https://www.jianshu.com/p/6c8d2730d088 https://docs.scrapy.org/en/latest/topics/item-pipeline.h ...

  6. Linux中执行C++程序

    参考:https://blog.csdn.net/qq_31125955/article/details/79343498 https://blog.csdn.net/weixin_35477207/ ...

  7. Scrapy框架-----爬虫

    说明:文章是本人读了崔庆才的Python3---网络爬虫开发实战,做的简单整理,希望能帮助正在学习的小伙伴~~ 1. 准备工作: 安装Scrapy框架.MongoDB和PyMongo库,如果没有安装, ...

  8. git切换到新的远程地址

    查看仓库链接 git remote -v 修改url链接 git remote set-url origin URL

  9. Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC

    解决Invalid character found in the request target. The valid characters are defined in RFC 7230 and RF ...

  10. XL4001 典型应用电路

    典型的应用电路如下: 中文数据手册:https://wenku.baidu.com/view/98ad2ed86f1aff00bed51ec7.html 在做毕设的时候用到的一款350ma的DC/DC ...