Mysql数据库学习(二):数据类型(数值类型 日期和时间类型 字符串类型)

桃扇骨 2022-08-25 05:20 255阅读 0赞

数据类型

数值类型

日期和时间类型

字符串类型

Center

一、数值类型

整数

Center 1

tinyint[M] [unsigned] [zerofill] // [ ] 表示可选,这里的M表示显示宽度,并不是取值范围,显示宽度不够前面以0填充
bool是tinyint(1)的别名

浮点型

IEEE 754浮点数表示

S:符号位

E:指数位

M:尾数位,也叫有效数字位

N =(-1)^S * M * 2^E

单精度float 4个字节 ,取值范围-3.402823466E+38~3.402823466E+38, 精度大约7位
双精度double 8个字节,取值范围 -1.7976931348623157E+308~1.7976931348623157E+308, 精度大约15位

Center 2Center 3

DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL] // M总位数,D是小数点后面的位数,这里是取值范围
real是double的别名

定点型

DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL] //M缺省是10,D缺省是0
decimal取值范围与double是一样的,但是有更高的精度。
decimal存储方式,参考:http://dev.mysql.com/doc/refman/5.1/zh/precision-math.html
numeric是decimal的别名

SQL Code











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





create 
table t_number(a 
tinyint, b 
tinyint unsigned);


insert 
into t_number 
values(
100
200);


insert 
into t_number 
values(-
129
200);


insert 
into t_number 
values(
128
200);


insert 
into t_number 
values(
127
200);


insert 
into t_number 
values(
127, -
1);




create 
table t_number2(a 
int(
4) zerofill);


insert 
into t_number2 
values(
123);


insert 
into t_number2 
values(
123456);




create 
table t_number3(a bool);




create 
table t_number4(a 
float, b 
double);


insert 
into t_number4 
values(
12345678.
12345
12345678.
12345);


insert 
into t_number4 
values(
12345678.
12345
123456789123456789.
12345); 
/ 12345700 | 1.2345678912345678e17  /


insert 
into t_number4 
values(
12345678.
12345
12345678912345.
12345);






create 
table t_number5(a 
double(
5,
2));


/ -999.99 ~999.99 /




create 
table t_number6(a 
decimal(
30,
6));


insert 
into t_number6 
values(
123456789123456789.
12345);


create 
table t_number7(a 
decimal(
5,
2));


/ -999.99 ~999.99/

二、字符串类型

char(M)
varchar(M) //这里的M表示字符数
Center 4

CHAR列的长度固定为创建表时声明的长度。长度可以为从0到255的任何值。当保存CHAR值时,在它们的右边填充空格以达到指定的长度。当检索到CHAR值时,尾部的空格被删除掉。在存储或检索过程中不进行大小写转换。

VARCHAR列中的值为可变长字符串。长度可以指定为0到65,535之间的值。VARCHAR的最大有效长度由最大行大小和使用的字符集确定。举例来说,如果字符集为uft8,那么一个字符需要3个字节来存储,则可以保存的字符数为65535/3=21845,此外还需要一个字符的位置来存储字符个数,故最大可填写的字符数为21844。若是latin1,一个字符只需1个字节存储,那么可填写的字符数为65532。

binary/varbinary

BINARY和VARBINARY 类似于CHAR和VARCHAR,不同的是它们包含二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值。

字符串存储需求

Center 5

VARCHAR、BLOB和TEXT类是变长类型。每个类型的存储需求取决于列值的实际长度(用前面的表中的L表示),而不是该类型的最大可能的大小。例如,VARCHAR(10)列可以容纳最大长度为10的字符串。实际存储需求是字符串(L)的长度,加上一个记录字符串长度的字节。对于字符串’abcd’,L是4,存储需要5个字节。
对于CHAR、VARCHAR和TEXT类型,前面的表中的值L和M应解释为字符数目,并且列定义中的这些类型的长度表示字符数目。例如,要想保存一个TINYTEXT值需要L字符+ 1个字节。

enum/set

SQL Code











1

2

3

4

5

6

7

8

9

10

11

12

13





create 
table t_enum(sex enum(
‘male’
‘female’)); 
/ 1 2 /


insert 
into t_enum 
values(
‘male’);


insert 
into t_enum 
values(
‘female’);


insert 
into t_enum 
values(
1);


select sex+
0 
from t_enum;




create 
table t_set(favourite 
set(
‘dog’
‘cat’
‘bird’)); 
/ 1 10 100 /


insert 
into t_set 
values(
‘dog,cat’);


insert 
into t_set 
values(
‘dog,bird’);


select favourite+
0 
from t_set;






枚举/集合看过去像是字符串,实际上保存的是整数。

三、日期和时间

Center 6

日期和时间看起来像字符串,但是以整数来保存的。

SQL Code











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





create 
table t_datetime(a 
datetime);




insert 
into t_datetime 
values(
‘2014-01-15 10:10:10’);


insert 
into t_datetime 
values(
‘9999-12-31 23:59:59’);


insert 
into t_datetime 
values(
‘10000-01-01 00:00:00’);


insert 
into t_datetime 
values(
‘999-01-01 00:00:00’);


insert 
into t_datetime 
values(
‘99-01-01 00:00:00’);


insert 
into t_datetime 
values(
‘69-01-01 00:00:00’);






create 
table t_timestamp(a 
timestamp);


insert 
into t_timestamp 
values(
‘2014-01-15 10:10:10’);


insert 
into t_timestamp 
values(
‘2038-01-19 03:14:07’);


insert 
into t_timestamp 
values(
‘2038-01-19 03:14:08’);


insert 
into t_timestamp 
values(
‘2038-01-19 11:14:07’);


insert 
into t_timestamp 
values(
‘2038-01-19 11:14:08’);




create 
table t_date(a 
date);


insert 
into t_date 
values(
‘2012-01-01’);




create 
table t_time(a 
time); 
/ 可以表示时间差 /


insert 
into t_time 
values(
‘23:12:12’);


insert 
into t_time 
values(
‘823:12:12’);


insert 
into t_time 
values(
‘3 23:12:12’); 
/ 3表示3小时 /




create 
table t_year(a 
year);


insert 
into t_year 
values (
2000);


insert 
into t_year 
values (
‘2155’);


insert 
into t_year 
values (
2156);

参考:

《数据库系统概论》

mysql 5.1 参考手册

发表评论

表情:
评论列表 (有 0 条评论,255人围观)

还没有评论,来说两句吧...

相关阅读