设为首页 加入收藏

TOP

数据库基本常用类型解析(一)
2015-07-24 10:52:10 来源: 作者: 【 】 浏览:2
Tags:数据库 基本 常用 类型 解析

int、bigint、smallint 和 tinyint
使用整数数据的精确数字数据类型。
bigint
从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。存储大小为 8 个字节。
int
从 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据(所有数字)。存储大小为 4 个字节。int 的 SQL-92 同义字为 integer。
mallint
从 -2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型数据。存储大小为 2 个字节。
tinyint
从 0 到 255 的整型数据。存储大小为 1 字节。
注释
在支持整数值的地方支持 bigint 数据类型。但是,bigint 用于某些特殊的情况,当整数值超过 int 数据类型支持的范围时,就可以采用 bigint。在 SQL Server 中,int 数据类型是主要的整数数据类型。
在数据类型优先次序表中,bigint 位于 smallmoney 和 int 之间。
只有当参数表达式是 bigint 数据类型时,函数才返回 bigint。SQL Server 不会自动将其它整数数据类型(tinyint、smallint 和 int)提升为 bigint。

char、varchar、nchar、nvarchar类型讲解:

一、基本区别:

1、char、varchar

char(n): 定长数据类型,n为能存储的最大字节长度(取值范围1~8000),当存入字符数少于n的时候,末尾用空格不足。当存入字符数超过n的时候,数据库阶段n之后的字符。

varchar(n): 变长数据类型,n为能存储的最大字节长度(取值范围1~8000),当存储字符占用字节少于n时,以实际使用为准;超过n时,截断。

这里为什么说n是来限定存储的字节呢?

原因在于当使用char或varchar来存储数据是:字符为因为字符,占一个字节;字符中文字符时,一个中文字符一般情况下占两个字节;要存入的字符为中英文混合时,按实际使用的字节计算。如‘中文ABC’存储占用字节为:2*2+3:。下面举个例子:

declare @var1 varchar(6), @var2 varchar(5);

set @var1='中文AB';

set @var2='中文AB';

select @var1, @var2;

执行结果如下:

| 未知列1 | 未知列2 |

---------------------------------------

| 中文AB | 中文A |

原因在于“中文AB”使用varchar类型来存储时占用字节为:2*2+2=6, 第二个varchar(5)限定了最长为5个字节所以会把超出部分截断,既‘B’丢失。

2、ncahr、nvarchar

nchar(n): 定长数据类型,存储字符为Unicode编码类型,每个字符占两个字节,n为能存储的最大字符数(取值范围1~4000【想想最大值为什么是4000?】),当存入字符数少于n的时候,末尾用空格不足。当存入字符数超过n的时候,数据库阶段n之后的字符。

nvarchar(n): 变长数据类型,存储字符为Unicode编码类型,每个字符占两个字节,n为能存储的最大字符数(取值范围1~4000),当存储字符占用字节少于n时,以实际使用为准;超过n时,截断。

同样以一个例子来说明,nvarchar(n)括号中的n指的是字符限定数。

declare @var1 nvarchar(4), @var2 nvarchar(3);

set @var1='中文AB';

set @var2='中文AB';

select @var1, @var2;

执行结果如下:

| 未知列1 | 未知列2 |

---------------------------------------

| 中文AB | 中文A |

二、使用情况:

【本段摘自http://www.cnblogs.com/ebaidu/archive/2007/08/14/854778.html 仅供学习使用】

很多开发者进行数据库设计的时候往往并没有太多的考虑char, varchar类型,有的是根本就没注意,因为存储价格变得越来越便宜了,忘记了最开始的一些基本设计理论和原则,这点让我想到了现在的年轻人,大手一挥一把人民币就从他手里溜走了,其实我想不管是做人也好,做开发也好,细节的把握直接决定很多东西。当然还有一部分人是根本就没弄清楚他们的区别,也就随便选一个。在这里我想对他们做个简单的分析,当然如果有不对的地方希望大家指教。

1、CHAR。CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不足的自动用空格填充,所以在读取的时候可能要多次用到trim() 。

2、VARCHAR。存储变长数据 ,但存储效率没有CHAR高。 如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的。VARCHAR类型的实际长度是它的值的实际长度+1。为什么“+1”呢?这一个字节用于保存实际使用了多大的长度。 从空间上考虑,用varchar合适;从效率上考虑,用char合适,关键是根据实际情况找到权衡点。

3、TEXT。text存储可变长度的非Unicode数据,最大长度为2^31-1(2,147,483,647)个字符。

4、NCHAR、NVARCHAR、NTEXT。这三种从名字上看比前面三种多了个“N”。它表示存储的是Unicode数据类型的字符。我们知道字符中,英文字符只需要一个字节存储就足够了,但汉字众多,需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。 nchar、 nvarchar的长度是在1到4000之间。和char、varchar比较起来,nchar、nvarchar则最多存储4000个字符,不论是英文还是汉字;而char、varchar最多能存储8000个英文,4000个汉字。可以看出使用nchar、nvarchar数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失。

补充:char(n)在读取是知道字符串的长度,可以一次读出。而varchar(n)就像C语言中的字符串处理方式一样,在末尾用'\0'来表示结尾,所以不能一次性读出,需要一个一个字符读出才能知道在哪里结束。所以char类型的读取速度比varchar类型的读取速度快。


所以一般来说,如果含有中文字符,用nchar/nvarchar,如果纯英文和数字,用char/varchar
我把他们的区别概括成:
CHAR, NCHAR 定长,速度快,占空间大,需处理
VARCHAR,NVARCHAR,TEXT 不定长,空间小,速度慢,无需处理
NCHAR、NVARCHAR、NTEXT处理Unicode码

【本段摘自http://wenku.baidu.com/view/eee97bf5f61fb7360b4c652b.html仅供学习使用】

varchar在SQL Server中是采用单字节来存储

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇自考颗粒归仓-----数据库原理概况 下一篇read(10,"NTP013690\n"..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Libevent C++ 高并发 (2025-12-26 00:49:30)
·C++ dll 设计接口时 (2025-12-26 00:49:28)
·透彻理解 C 语言指针 (2025-12-26 00:22:52)
·C语言指针详解 (经典 (2025-12-26 00:22:49)
·C 指针 | 菜鸟教程 (2025-12-26 00:22:46)