char nchar varchar nvarchar的区别(转)
char nchar varchar nvarchar的区别
今天在论坛里看到有人激烈讨论这几个数据类型的区别跟实际使用情况,很多人都搞不清楚究竟哪个场景使用哪个数据类型
现在就摘录一下sql2005联机丛书里的关于这几个数据类型的解释
字符数据类型(nchar 长度固定,nvarchar 长度可变)和 Unicode 数据使用 UNICODE UCS-2 字符集。
nchar [ ( n ) ]
n 个字符的固定长度的 Unicode 字符数据。n 值必须在 1 到 4,000 之间(含)。存储大小为两倍 n 字节。nchar 的 SQL-2003 同义词为 national char 和 national character。
nvarchar [ ( n | max ) ]
可变长度 Unicode 字符数据。n 值在 1 到 4,000 之间(含)。max 指示最大存储大小为 2^31-1 字节。存储大小是所输入字符个数的两倍 + 2 个字节。所输入数据的长度可以为 0 个字符。nvarchar 的 SQL-2003 同义词为 national char varying 和 national character varying。
备注 如果没有在数据定义或变量声明语句中指定 n,则默认长度为 1。如果没有使用 CAST 函数指定 n,则默认长度为 30。
如果列数据项的大小可能相同,请使用 nchar。
如果列数据项的大小可能差异很大,请使用 nvarchar。
sysname 是系统提供的用户定义数据类型,除了不以为零外,在功能上与 nvarchar(128) 相同。sysname 用于引用数据库对象名
固定长度或可变长度的字符数据类型。
char [ ( n ) ]
固定长度,非 Unicode 字符数据,长度为 n 个字节。n 的取值范围为 1 至 8,000,存储大小是 n 个字节。char 的 SQL 2003 同义词为 character。
varchar [ ( n | max ) ]
可变长度,非 Unicode 字符数据。n 的取值范围为 1 至 8,000。max 指示最大存储大小是 2^31-1 个字节。存储大小是输入数据的实际长度加 2 个字节。所输入数据的长度可以为 0 个字符。SQL-2003 中的 varchar 就是 char varying 或 character varying。
备注 如果未在数据定义或变量声明语句中指定 n,则默认长度为 1。如果在使用 CAST 和 CONVERT 函数时未指定 n,则默认长度为 30。
将为使用 char 或 varchar 的对象指派数据库的默认排序规则,除非使用 COLLATE 子句指派了特定的排序规则。该排序规则控制用于存储字符数据的代码页。
如果站点支持多语言,请考虑使用 Unicode nchar 或 nvarchar 数据类型,以最大限度地消除字符转换问题。如果使用 char 或 varchar,建议执行以下操作:
如果列数据项的大小一致,则使用 char。
如果列数据项的大小差异相当大,则使用 varchar。
如果列数据项大小相差很大,而且大小可能超过 8,000 字节,请使用 varchar(max)。
本人测试了一下这几个数据类型的区别,以下是测试脚本跟结果:

DECLARE @a CHAR(6)
SET @a='您啊啊啊啊是'
PRINT 'char:'+@a DECLARE @b CHAR(6)
SET @b='abcdefg'
PRINT 'char:'+@b DECLARE @c CHAR(6)
SET @c=''
PRINT 'char:'+@c
----------------------- DECLARE @d NCHAR(6)
SET @d=N'您啊啊啊啊是'
PRINT 'nchar:'+@d DECLARE @e NCHAR(6)
SET @e=N'abcdefg'
PRINT 'nchar:'+@e DECLARE @f NCHAR(6)
SET @f=N''
PRINT 'nchar:'+@f
------------------------------ DECLARE @g VARCHAR(6)
SET @g='您啊啊啊啊是'
PRINT 'varchar:'+@g DECLARE @h VARCHAR(6)
SET @h='abcdefg'
PRINT 'varchar:'+@h DECLARE @i VARCHAR(6)
SET @i=''
PRINT 'varchar:'+@i
--------------------------------
DECLARE @j NVARCHAR(6)
SET @j=N'您啊啊啊啊是'
PRINT 'nvarchar:'+@j DECLARE @k NVARCHAR(6)
SET @k=N'abcdefg'
PRINT 'nvarchar:'+@k DECLARE @l NVARCHAR(6)
SET @l=N''
PRINT 'nvarchar:'+@l

结果:
char:您啊啊 char:abcdef char:123456 nchar:您啊啊啊啊是 nchar:abcdef nchar:123456 varchar:您啊啊 varchar:abcdef varchar:123456 nvarchar:您啊啊啊啊是 nvarchar:abcdef nvarchar:123456
最后说一下,NCHAR NVARCHAR都要在字符前面加N,避免出现乱码!!
原始博客地址:http://www.cnblogs.com/lyhabc/archive/2012/08/31/2665937.html
char nchar varchar nvarchar的区别(转)的更多相关文章
- char nchar varchar nvarchar varchar2区别
char(n):长度不可变,长度为n个字节,非Unicode字符 nchar(n):长度不可变,长度为2n个字节,Unicode字符 varchar(n):长度可变,长度为n个字节,非Unicode字 ...
- SQLServer中char、varchar、nchar、nvarchar的区别
http://www.cnblogs.com/14lcj/archive/2012/07/08/2581234.html SQLServer中char.varchar.nchar.nvarchar的区 ...
- 万答#11,MySQL中char与varchar有什么区别
万答#11,MySQL中char与varchar有什么区别 1.实验场景 GreatSQL 8.0.25 InnoDB 2.实验测试 2.1 区别 参数 char varchar 长度是否可变 定长 ...
- SQLServer中char、varchar、nchar、nvarchar的区别:
(1) 定义: char: 固定长度,存储ANSI字符,不足的补英文半角空格. nchar: 固定长度,存储Unicode字符,不足的补英文半角空格 varchar: 可变长度 ...
- Sqlserver中char,nchar,varchar与Nvarchar的区别分析
1. char类型: 对英文(ASCII)字符占用1个字节,对一个汉字占用2个字节,CHAR存储定长数据很方便,CHAR字段上的索引效率极高,比如定义char(10),那么不论你存储的数据是否达 到了 ...
- 2019-2-20Sqlserver数据库中char、varchar、nchar、nvarchar的区别及查询表结构
varchar 和 nvarchar区别: varchar(n)长度为 n 个字节的可变长度且非 Unicode 的字符数据.n 必须是一个介于 1 和 8,000 之间的数值.存储大小为输入数据的字 ...
- 【字符串区别】SQLServer中char、varchar、nchar、nvarchar的区别:
一.定义 char: 固定长度,存储ANSI字符,不足的补英文半角空格. nchar: 固定长度,存储Unicode字符,不足的补英文半角空格 varchar: 可变长度,存储ANSI字符 ...
- Sql Server char、varchar、nchar、nvarchar的区别
(1) 定义: char: 固定长度,存储ANSI字符,不足的补英文半角空格. nchar: 固定长度,存储Unicode字符,不足的补英文半角空格 varchar: 可变长度,存储ANSI字符,根据 ...
- 【转载】SQLServer中char、varchar、nchar、nvarchar的区别:
(1) 定义: char: 固定长度,存储ANSI字符,不足的补英文半角空格. nchar: 固定长度,存储Unicode字符,不足的补英文半角空格 varchar: 可变长度 ...
随机推荐
- 如何将NetBeans转换为英文版(图)
很郁闷,又是一个系统语言的问题. NetBeans下载下来之后,怎么装都是个中文版,或者半中文半英文,不伦不类的.上网找了一个圈,很多都讲得不清楚,最后终于有了一个答案: 在NetBeans的配置文件 ...
- 【虚拟化】支持IDE/SATA/SCSI
驱动说明 IDE :IDE和SATA是最常用的两种磁盘格式,基本每个系统上都会有: SATA:同IDE: SCSI :系统上一般缺少此驱动,需要手动安装: Linux下的名称 IDE硬盘:hd[ ...
- Redis系统管理相关指令简介
常用命令列表 DBSIZE 返回当前数据库 Key 的数量 INFO ...
- bzoj1173: [Balkan2007]Point
Description 给出N个三维空间上的点. 问有多少条直线,这些直线上至少有三个点. Input 第一行给出数字N,N在[4,1000] 下面N行,每行三个数字,用于描述点的坐标,其值在[-10 ...
- Func系列1:安装配置
简介 Func是由红帽子公司以Fedora平台构建的统一网络控制器,是为解决集群管理.监控问题而设计开发的系统管理框架.它是一个能有效简化多服务多服务器系统管理工作的工具,它易于学习.使用和扩展,功能 ...
- 恢复ext4文件系统superblock
恢复ext4文件系统superblock 1. Create ext4 文件系统. [root@localhost ~]# mkfs.ext4 /dev/vdb1 [root@localhost ~] ...
- WINDOWS黑客基础(5):利用内存来进行获取计算结果
在前面的注入代码的章节中,我们利用了VirtualAllocEx来在对方的进程开辟了一块内存,并且将代码复制进对方进程的内存里面,从而执行那段内存的代码,但是这里有一个问题,就是代码不是执行在我们进程 ...
- usaco 2010年3月银组题解
usaco银组解题报告 一.石子游戏如果把‘O’当作0,‘X’当做1,则N个洞的每一种状态都可以看做是一个N位二进制数.于是,这个问题就变成了求环绕的N位格雷码.幸运的是,这个结构很容易就能够用一个简 ...
- 【freemaker】之Unknown built-in variable: now
Caused by: freemarker.core.ParseException: Unknown built-in variable: now 意思是没有内置变量,看了一下源码2.3.15版本fr ...
- "unresolved external symbol __imp__WSACleanup@0"
编译时出现这种问题怎么解决:"unresolved external symbol __imp__WSACleanup@0"出现此类问题一般是ws2_32.lib这个lib没有li ...