mysql基础之基本数据类型

时间:2022-02-28 17:27:43
原文: mysql基础之基本数据类型


列类型学习

mysql三大列类型

整型

 Tinyint/ smallint/ mediumint/int/ bigint(M) unsigned zerofill

字符串型 

Char(M)

Varchar(M)

Text 文本类型

 

日期时间类型

Date 日期

Time 时间

Datetime 时间时间类型

Year 年类型


整形:

整型系列所占字节与存储范围的关系.

定性占字节越多,存储范围越大.

下图是具体的数字分析

 

Tinyint 1个字节 8个位  0 - 2^8-1  ,  0-255

                -2^7 ----> +2^7-1

 

 

分析:

Smallint 2个字节 , 16位  0----2^16-1 = 65535

                -2^15 ---> +2^15-1, -32768 -> 32767

 

一般而言,设某类型 N字节

N字节 , 8N.

0 ----> 2^8N-1

 

-2^(8N-1)  ---> +2^(8N-1) -1; 

 

对于int型 占的字节越多,存储的范围也越大.

mysql基础之基本数据类型

整型系统的可选参数 : XXint(M)  unsigned zerofill

: age tinyint(4) unsigned ,或者  stunum smallint(6) zerofill;

Unsigned: 代表此列为无符号类型会影响到列的存储范围. (范围从0开始)

(不加unsinged, 则该列默认是有符号类型,范围从负数开始)

 

 

 

Zerofill: 代表0填充如果该数字不足参数M则自动补0, 补够M.

1: 如果没有zerofill属性单独的参数M,没有任何意义.

2:如果设置某列为zerofill,则该列已经默认为 unsigned,无符号类型.

mysql基础之基本数据类型


小数型

 

Float(M,D),decimal(M,D)

  M"精度" ---->代表"总位数",D"标度",代表小数位.(小数右边的位数)

 

 

浮点数占多大的空间呢

答: float 能存10^38 ,10^-38

如果M<=24, 4个字节,否则占8字节

 

用来表示数据中的小数,除了float---浮点.

还有一种叫定点decimal,定点是把整数部分和小数部分,分开存储的.

float精确,他的长度是变化的.

 

 

 

空间上的区别:

Float(M,D), M<=24, 4个字节, 24 <M <=53, 8个字节

Decimal () ,变长字节.

 

区别: decimalfloat精度更高适合存储货币等要求精确的数字,

见下例:

mysql基础之基本数据类型



字符串性:

Mysql 字符串类型

Char 定长类型

Char(M)  , M 代表宽度, 0<=M<=255之间

:Char(10)  ,则能输入10个字符.

 

Varchar 变长类型

Varchar(M), M代表宽度, 0<=M<=65535(ascii字符为例,utf822000左右)

0000000000

00\0\0\0\0\0 (char,如果不够M个字符,内部用空格补齐,取出时再把右侧空格删掉)  

:这意味着,如果右侧本身有空格,将会丢失.

通过concat函数可以验证!

M 代表字符长度,和是否是汉字和字母无关。

mysql基础之基本数据类型

Blob,是二进制类型,用来存储图像,音频等二进制信息.

意义: 2进制,0-255都有可能出现.

Blob在于防止因为字符集的问题,导致信息丢失.

比如:一张图片中有0xFF字节这个在ascii字符集认为非法,在入库的时候,被过滤了.

enum选择一个,set选择多个


日期时间类型

Year (1字节)    95/1995,  [1901-2155],

insert,可以简写年的后2,但是不推荐这样.

[00-69] +2000

[70-99] + 1900,   

2,表示 1970 - 2069

 

Date 日期  1998-12-31

范围: 1000/01/01 ,9999/12/31

 

Time 时间  13:56:23

范围: -838:59:59 -->838:59:59


datetime 时期时间  1998-12-31 13:56:23

范围: 1000/01//01 00:00:00  ---> 9999:12:31 23:59:59

 

timestamp

 

时间戳

1970-01-01 00:00:00 到当前的秒数

一般存注册时间,商品发布时间等,并不是用datetime存储,而是用时间戳.

因为datetime虽然直观,但计算不便.