(二)数据类型


1、基本介绍

数据类型:
  数据类型是指列、存储过程参数、表达式和局部变量的数据特征,其决定了数据的存储格式,代表了不同的信息类型。具体包括:整型、小数型、日期时间型、字符型、复合型、二进制型。


2、整型

数据类型 存储范围 字节
TINYINT 有符号值:-128至127(-27至27-1)<br />无符号值:0至255(0至2^8-1) 1
SMALLINT 有符号值:-32768至32767(-215至215-1)<br />无符号值:0至65535(0至2^16-1) 2
MEDIUMINT 有符号值:-8388608至8388607(-223至223-1)<br />无符号值:0至16777215(0至2^24-1) 3
INT 有符号值:-2147483648至2147483647(-231至231-1)<br />无符号值:0至4294967295(0至2^32-1) 4
BIGINT 有符号值:-9223372036854775808至9223373036854775807(-263至263-1)<br />无符号值:0至18446744073709551615(0至2^64-1) 8

注意:

  1. 计算机在最终存储数据时,是以二进制的形式存储的,此时就涉及到存储数字时正负数的问题。有符号位是指数字的最高位用0或1来表示数字是正数还是负数;无符号位则不存在数字是负数的情况,但二者的实际存储范围是一致的。详细的介绍可以参考已完结的二进制基础专题。
    <br />
  2. 假设说需要存储一个人的年龄,一般来说大致范围是0至100多一点,当然在存储时可以选择BIGINT类型,但是一条BIGINT类型的数据就占用8个字节,而TINYINT类型只占用1个字节,当待存储数据的数量是上千万条时,选择TINYINT类型的优越性就会凸显出来,因此在数据优化时的原则之一,就是选择最合适的而不是最大的数据类型

3、小数型

数据类型 | 存储范围
----|------|----
DECIMAL(M,D)| M的取值范围为1-65,取0时会被设为默认值,超出范围会报错。<br />D的取值范围为0-30,而且必须<=M,超出范围会报错。<br />M是数字总位数,D是小数点后面的位数。<br /> M的默认取值为10,D默认取值为0。<br />用于表示精度确定的小数类型。
FLOAT[(M,D)]| -3.402823466E+38至-1.175494351E-38,<br />1.175494351E-38至3.402823466E+38。<br />M是数字总位数,D是小数点后面的位数。<br />如果M和D被省略,则根据硬件允许的限制来储存值。<br />单精度浮点数精确到大约7位小数位。
DOUBLE[(M,D)]| -1.7976931348623157E+308至-2.2250738585072014E-308,<br />0,<br />2.2250738585072014E-308至1.7976931348623157E+308。<br />M是数字总位数,D是小数点后面的位数。

注意:

  1. “E+38”代表科学计数法,即1038,同理“E-38”指的是10-38。
    <br />
  2. M始终是大于或等于D,例如FLOAT(5,2),表示总共有5位数,小数点后有2位数,因此最大值为999.99。

4、日期时间型

列类型 | 格式| 存储范围| 存储需求
----|------|----
YEAR| yyyy|‘1901’至‘2155’ |1
TIME| hh:mm:ss|'-838:59:59'至'838:59:59'| 3
DATE| yyyy-MM-dd|'1000-01-01'-'9999至12-31'| 3
DATETIME| yyyy-MM-dd hh:mm:ss|'1000-01-01 00:00:00'<br />至<br />'9999-12-31 23:59:59'| 8
TIMESTAMP| yyyy-MM-dd hh:mm:ss|'1970-01-01 00:00:01' UTC <br />至<br />'2038-01-19 03:14:07' UTC| 4

注意:

  1. YEAR可以储存为2位或4位,默认是4位,当存储为2位时,范围是‘1970’至‘2069’。
    <br />
  2. TIMESTAMP即时间戳,会自动获取当前的服务器时间,且与时区密切相关,如果以我国所在的东八区为例,则时间戳的范围是'1970-01-01 08:00:01' UTC 至'2038-01-19 11:14:07'
    <br />
  3. TIME类型的小时数如此之大,是因为其不仅可以用于表示一天的时间,还可以为表示事件之间的时间间隔。

5、字符型

列类型 | 存储需求
----|------|----
CHAR(M)| M个字节,0<=M<=255
VARCHAR(M)|如果记录存储长度在0-255字节之间,则共L+1个字节<br />如果记录存储长度超过255字节,则共L+2个字节<br />其中L<=M,且0<=M<=65535
TINYTEXT| L+1个字节,其中L<2^8
TEXT| L+2个字节,其中L<2^16
MEDIUMTEXT| L+3个字节,其中L<2^24
LONGTEXT| L+4个字节,其中L<2^32

注意:

  1. CHAR属于定长类型,VARCHAR属于变长类型,且都必须用括号注明其大小;不同的是,当存储的数据小于指定长度时,CHAR类型会用空格补齐,而VARCHAR则不会,可参考下图示例:



      当指定长度为4个字节的时候,不论存储的值是多少,CHAR类型始终存储4个字节,空缺用空格补齐;而VARCHAR类型则是根据数据的实际多少进行存储,且用1个字节来记录长度;当达到存储设定的上限时,未被储存的值会舍弃。
    <br />

  2. “L+x个字节”的意思是指对于变长类型在处理数据时,需要把数据内容和数据长度都保存起来,因此会保存需要的L个字节,另加x个字节来记录长度。

6、复合型

列类型 | 存储需求
----|------|----
ENUM('value1','value2',……)| 1或2个字节,取决于枚举值的个数,最多65535个值
SET('value1','value2',……)| 1、2、3、4或8个字节,取决于SET成员的数目,最多64个成员

注意:

  1. ENUM类型只允许在枚举值中取得一个值,可以更好的处理例如“人的性别”这种相互排拆的数据,类似于单选项。
    <br />
  2. SET类型可以从预定义的集合中取得任意数量的值,类似于多项选。

7、二进制型

列类型 | 存储需求
----|------|----
BINARY(M)| M个字节,0<=M<=255
VARBINARY(M)|L+1个字节,其中L<=M,且0<=M<=65535
TINYBLOB| L+1个字节,其中L<2^8
BLOB| L+2个字节,其中L<2^16
MEDIUMBLOB| L+3个字节,其中L<2^24
LONGBLOB| L+4个字节,其中L<2^32

注意:

  1. BINARY和VARBINARY类型,类似于CHAR和VARCHAR类型。但是不同的是,其存储的不是字符串,而是二进制串。
    <br />
  2. BLOB类型与TEXT类型相似,同样具有4种大小不同的类型,只不过用来存储二进制数据。
    <br />
  3. 二进制类型与字符串类型的区别在于:字符串类型的数据按字符为单位进行存储,因此存在多种字符集、多种字符序;而二进制类型的数据按字节为单位进行存储,仅存在二进制字符集binary。

版权声明:欢迎转载,欢迎扩散,但转载时请标明作者以及原文出处,谢谢合作!             ↓↓↓
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容