[转帖]Sqlserver数据库中char、varchar、nchar、nvarchar的区别及查询表结构
https://www.cnblogs.com/liuqifeng/p/10405121.html
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
3
4
5
6
7
8
9
10
|
--查询表的字段说明--use dataname -----数据库名SELECT t.[name] AS 表名,c.[name] AS 字段名,cast(ep.[value]as varchar(100)) AS [字段说明]FROM sys.tables AS tINNER JOIN sys.columnsAS c ON t.object_id = c.object_idLEFT JOIN sys.extended_properties AS epON ep.major_id = c.object_id AND ep.minor_id = c.column_id WHERE ep.class =1AND t.name='CN_PG'--------表名 |
快速查看表结构(比较全面的)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
--快速查看表结构(比较全面的)SELECT CASE WHEN col.colorder = 1 THEN obj.nameELSE ''END AS 表名,col.colorder AS 序号 ,col.name AS 列名 ,ISNULL(ep.[value], '') AS 列说明 ,t.name AS 数据类型 ,col.length AS 长度 ,ISNULL(COLUMNPROPERTY(col.id, col.name, 'Scale'), 0) AS 小数位数 ,CASE WHEN COLUMNPROPERTY(col.id, col.name, 'IsIdentity') = 1 THEN '√'ELSE ''END AS 标识 ,CASE WHEN EXISTS ( SELECT 1FROM dbo.sysindexes siINNER JOIN dbo.sysindexkeys sik ON si.id = sik.idAND si.indid = sik.indidINNER JOIN dbo.syscolumns sc ON sc.id = sik.idAND sc.colid = sik.colidINNER JOIN dbo.sysobjects so ON so.name = si.nameAND so.xtype = 'PK'WHERE sc.id = col.idAND sc.colid = col.colid ) THEN '√'ELSE ''END AS 主键 ,CASE WHEN col.isnullable = 1 THEN '√'ELSE ''END AS 允许空 ,ISNULL(comm.text, '') AS 默认值FROM dbo.syscolumns colLEFT JOIN dbo.systypes t ON col.xtype = t.xusertypeinner JOIN dbo.sysobjects obj ON col.id = obj.idAND obj.xtype = 'U'AND obj.status >= 0LEFT JOIN dbo.syscomments comm ON col.cdefault = comm.idLEFT JOIN sys.extended_properties ep ON col.id = ep.major_idAND col.colid = ep.minor_idAND ep.name = 'MS_Description'LEFT JOIN sys.extended_properties epTwo ON obj.id = epTwo.major_idAND epTwo.minor_id = 0AND epTwo.name = 'MS_Description'WHERE obj.name = 'CN_PG'--表名ORDER BY col.colorder ; |
表结构查询
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
--SQLServer根据表明查询表的外键关系SELECT 主键列ID=b.rkey ,主键列名=(SELECT name FROM syscolumns WHERE colid=b.rkey AND id=b.rkeyid) ,外键表ID=b.fkeyid ,外键表名称=object_name(b.fkeyid) ,外键列ID=b.fkey ,外键列名=(SELECT name FROM syscolumns WHERE colid=b.fkey AND id=b.fkeyid) ,级联更新=ObjectProperty(a.id,'CnstIsUpdateCascade') ,级联删除=ObjectProperty(a.id,'CnstIsDeleteCascade') FROM sysobjects a join sysforeignkeys b on a.id=b.constid join sysobjects c on a.parent_obj=c.id where a.xtype='f' AND c.xtype='U' and object_name(b.rkeyid)='TABLE_PMD_TPP_TRAITS' |
|
1
2
3
4
5
|
获取SqlServer中表结构 SELECT syscolumns.name,systypes.name,syscolumns.isnullable, syscolumns.length FROM syscolumns, systypes WHERE syscolumns.xusertype = systypes.xusertype 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 '你的表名' ; |
[转帖]Sqlserver数据库中char、varchar、nchar、nvarchar的区别及查询表结构的更多相关文章
- SQL中 char varchar和nvarchar的区别
转至:http://www.cnblogs.com/carekee/articles/2094676.html char char是定长的,也就是当你输入的字符小于你指定的数目时,char(8) ...
- SQL Server char,varchar,nchar,nvarchar区别
SQL Server char,varchar,nchar,nvarchar区别 (1) 定义: char: 固定长度,存储ANSI字符,不足的补英文半角空格. nchar: 固 ...
- 数据库char varchar nchar nvarchar,编码Unicode,UTF8,GBK等,Sql语句中文前为什么加N(一次线上数据存储乱码排查)
背景 公司有一个数据处理线,上面的数据经过不同环境处理,然后上线到正式库.其中一个环节需要将数据进行处理然后导入到另外一个库(Sql Server).这个处理的程序是老大用python写的,处理完后进 ...
- sqlserver数据库中char、varchar、text与nchar、nvarchar、ntext数据类型使用详解
很多开发者进行数据库设计的时候往往并没有太多的考虑char, varchar类型,有的是根本就没注意,因为存储价格变得越来越便宜了,忘记了最开始的一些基本设计理论和原则,这点让我想到了现在的年轻人,大 ...
- 2019-2-20Sqlserver数据库中char、varchar、nchar、nvarchar的区别及查询表结构
varchar 和 nvarchar区别: varchar(n)长度为 n 个字节的可变长度且非 Unicode 的字符数据.n 必须是一个介于 1 和 8,000 之间的数值.存储大小为输入数据的字 ...
- sql server数据库中char、nchar、varchar、nvarchar的选择
在数据库中,字符型的数据是最多的,可以占到整个数据库的80%以上.为此正确处理字符型的数据,对于提高数据库的性能有很大的作用. 在字符型数据中,用的最多的就是Char与Varchar两种类型.前面的是 ...
- 数据库中char, varchar, nvarchar的差异
char char是定长的,也就是当你输入的字符小于你指定的数目时,char(8),你输入的字符小于8时,它会再后面补空值.当你输入的字符大于指定的数时,它会截取超出的字符. nvarc ...
- sql server数据库中char,varchar,nvarchar字段的区别
Char,varchar,nvarchar字段是sql server数据库中的三种字段类型.好多人在选择存储的时候不知道如何抉择,我给大家讲下这个三个字段类型的区别. Char(n)是长度为n个字节的 ...
- 【转】CHAR CHARACTER VARCHAR NCHAR NVARCHAR NVARCHAR2区别
http://blog.csdn.net/lhl6688/article/details/44156823?ref=myread oracle提供了五种字符数据类型:char.nchar.varcha ...
- 数据库之char vchar nchar nvchar的区别
转自:http://blog.csdn.net/a11112244444/article/details/51475107 首先介绍一下定长或变长 所谓定长就是长度固定的,当输入的数据长度没有达到指定 ...
随机推荐
- Windows 设置 VMware workstation 虚拟机开机启动
参考 https://www.cnblogs.com/qmfsun/p/6284236.html http://www.cnblogs.com/eliteboy/p/7838091.html 司徒晓宇 ...
- Freezable ---探索WPF中Freezable承载数据的原理
引言 在之前写的一篇文章[WPF --- 如何以Binding方式隐藏DataGrid列]中,我先探索了 DataGridTextColumn 为什么不在可视化树结构内?又给出了解决方案,使用 Fre ...
- Mysql性能优化这5点你知道吗?简单却容易被初学者忽略!
Mysql性能优化这5点你知道吗?简单却容易被初学者忽略! 文编|JavaBuild 哈喽,大家好呀!我是JavaBuild,以后可以喊我鸟哥,嘿嘿!俺滴座右铭是不在沉默中爆发,就在沉默中灭亡,一起加 ...
- Mybatis源码4 Cache的实现和其原理
Mybatis CachingExecutor, 二级缓存,缓存的实现 一丶二级缓存概述 上一章节,我们知道mybaits在构造SqlSession的时候,需要让SqlSession持有一个执行器,如 ...
- 文心一言 VS 讯飞星火 VS chatgpt (41)-- 算法导论5.4 5题
五.在大小为n的集合中,一个k字符串构成一个k排列的概率是多少?这个问题和生日悖论有什么关系? 文心一言: 在大小为n的集合中,一个k字符串构成一个k排列的概率是1/k!,这是由于排列的总数是k!,而 ...
- mac phpbrew安装
php 编译安装php 7.2.26 aliyun 镜像中心:https://developer.aliyun.com/mirror/ 1.安装brew /usr/bin/ruby -e " ...
- C++篇:第二章_运算符_知识点大全
C++篇为本人学C++时所做笔记(特别是疑难杂点),全是硬货,虽然看着枯燥但会让你收益颇丰,可用作学习C++的一大利器 二.运算符 (一)运算符本身运用限制 %取余运算符要求运算数必须是整型,浮点数取 ...
- CloudIDE插件在手,按时下班不愁
摘要:带你通过插件机制将CloudIDE扩展出你想要的功能,在CloudIDE中看视频,玩游戏,聊天都可以通过我们的插件来轻松实现,让生产工具不再枯燥,开发工作多姿多彩. 距离华为云CloudIDE在 ...
- 梳理数仓FI manager节点健康检查逻辑
摘要:一篇记录FI Manager节点健康检查机制的博文. 本文分享自华为云社区<GaussDB(DWS) FI manager节点健康检查逻辑梳理>,作者:配音师 . 一.相关背景 1. ...
- 分享两个常见的搜索算法:BFS和DFS
摘要:本文为大家分享两个常见的搜索算法:BFS和DFS. 本文分享自华为云社区<BFS和DFS算法初探>,作者: ayin. 本次分享两个常见的搜索算法: 1.BFS 即广度优先搜索 2. ...