mysql数据类型之四逻辑型_MySQL数据类型(四)

一、数据类型

deb8319c57925c33e37e60b7a34fdf6d.png

二、整型类型

cb0cc9fd4aaa09f70fbf69f6af75b671.png

tinyInt:

1个字节:-128-127(有符号)

是否有符号,可以定义时,使用unsign标识,表示无符号的,不写表示有符号的

Create table

student(

stu_no int,

stu_age tinyInt

unsigned

);

insert into tbl_int values(255,127);

insert into tbl_int

values(0,128);

定义显示宽度

通过规定数据的显示宽度,达到统一显示的目的类型(M)M表示显示的最小宽度是多少?

需要使用前导零填充到达目的。称之为zerofill

alter table tbl_int add c tinyint(2) zerofill;

//在表中c字段数值显示宽度自小显示两位,数值不足

两位前面补0,超过两位的数值不受影响。

insert into tbl_int values(0,127,1);

insert into tbl_int

values(0,127,9);

insert into tbl_int

values(0,127,10);

insert into tbl_int values(0,127,123);

二、浮点类型

30e1132ddaee726269d5068806a33d77.png

+-123.456;

0.123456 * 10^3

0.123456789 * 10^3

create table num_2(

a float,

b double

);

insert into num_2

values(1234567890.0123456789,1234567890.0123456789);

select *

from num_2;

结果:

1234570000,1234567890.0123458

float 类型 默认精度位数在6位左右,取决于操作系统

double

类型默认精度位数在16位左右,取决于操作系统。

2.1 浮点类型

都支持控制数值的范围。

Type(M,D)

M表示所有的数值位数(不包括小数点和符号)

D表示允许的小数位数

create table num_3(

a float(5,2),

b double

(8,3)

);

insert into num_2

values(567.12,1234.567);

insert into num_2

values(1567.12,123456.5);

123456.5

看上去总数和小数位数都没有超过,但是确定M,D时,已经确定整数的位数

5,2

-999.99 到

999.99

8,3

-99999.999 到 99999.999

浮点数支持科学技术法

1.234 * 10^3 == 1.23E3

insert into num_2

values(1.23E3,456.7E2);

2.2

定点数类型

定点数:小数点固定,小数位数不固定。浮点数的小数点不固定。

Decimal(M,D)

M总位数

D小数位数。(范围存在)

M默认为10,D默认为0

create table num_4(

send_money decimal(10,2)

);

insert into num_4

values(1234.56);

结果:1234.56

insert into num_4

values(1234.567);

结果为1234.57 四舍五入把最后一位7给舍掉了。

不会像单精度和双精度丢失精度。

小数支持zerofill

alter table num_4 money decimal(10,2)

zerofill;

insert into num_4 values(1234.56,1234,56);

支持无符号

unsigned

三、日期时间类型

dd68959f4bb9c853063213a06b3bfd05.png

四、DateTime类型

年份月日时分秒 Datetime

范围:9999-12-31 23:59:59

年月日 Date

时间戳 Timestamp

存储是整型,表示时,日期类型。范围:0-21多亿,到2038-01-19 03:14:07

create table dt_1(

a datetime,

b

timestamp

);

处理形式一样,表现形式是不一样的!

insert into dt_1 values(‘2013-04-16 11:50:23‘,‘2013-04-16

11:50:25‘);

insert into dt_1 values(‘2038-01-19

03:14:07‘,‘2038-01-19 03:14:07‘);

insert into dt_1

values(‘2038-01-19 03:14:10‘,‘2038-01-19 03:14:10‘);

检索列时,+0可以检索到时间戳。

select a,b+0 from

dt_1;

结果:

2013-04-16 11:50:23,20130416115025

支持任意分割符日期

insert into dt_1

values(‘20380119031407‘,‘20380119031407‘)

insert into dt_1

values(‘2038:01:19 03:14:07‘,‘20380119031407‘)

但是如果出现歧义,但是不建议使用特殊的分隔符,会导致逻辑不清晰。

insert into dt_1

values(‘20:12:19‘,‘20380119031407‘) 结果:2020-12-19

insert into

dt_1

values(‘89:12:19‘,‘20380119031407‘)

支持两位年份:

70-69

1970 -2069

70-99 19xx

0-69 20xx年

不建议使用。

insert into dt_1 values(0,0);

结果为 0000-00-00

00:00:00(通常表示整个月),0

支持0值,表示当前没有规定,2013-04-0表示4月整个月。(逻辑想法)

五、Time类型

表示意义:

1、一天中的时间

2、两个时间点的间隔时,可以使用天来表示。格式:

D

HH:MM:SS

D天

create table t_1(

ago_time

);

insert into t_1 values(‘23:12:11‘);

insert into t_1

values(‘231211‘);

insert into t_1 values(‘5 12:34:11‘);

六、Year类型

create table y_1(

`begin` year

);

此事日期的范围,就不是1000到9999

而是1901到2155一个字节表示

insert into y_1 values(1985);

七、字符串类型

char(M):固定长度

varchar(M):可变长度

M:允许的字符串的长度

M在varchar中表示允许的最大长度

char表示严格限定的长度

M表示的是字符数,而不是字节数。但是,总的长度的使用是按照字节计算的。

create table s_1(

a char(18),

b

varchar(18)

);

create table s_2(

a varchar(65535)

);

create table s_3(

a varchar(65535)

)charater set

gbk;

create table s_4(

a varchar(65535)

)charater set

utf8;

注意,字段最大长度,除了类型本身限制之外,记录的总长度也受限制

create table s_2(

a varchar(21845)

)charater set

utf8;

create table s_2(

a varchar(21844)

)charater set

utf8;

create table s_3(

a varchar(65532) not null

)charater

set set latin1;

create table s_4(

a varchar(65532)

)charater

set set latin1;

create table s_5(

a varchar(65533)

)charater

set set latin1;

create table s_5(

a varchar(65533) not

null

)charater set set latin1;

真实的varchar的长度:

总长度:65535,

varchar特点,当类型数据超过255个字符时,采购2个字节表示长度。

65535-2=65535

整条记录,需要一个额外的字节,用于保存当前的null值

除非所有的字段都不是null,这个字节才能省略

create table s_5(

a varchar(65532) not null,

b

tinyint not null

)charater set set latin1;

存在null,都是使用统一的一个字节来表示。而不是每个字节一个字段。

create table s_7(

a text,

b text

) character set

latin1;

Text

2^16

文本,有很多兄弟类型

Tinytext longtext

八、枚举类型

create table s_8(

gender

enum(‘female‘,‘male‘)

);

insert into s_8

values(‘male‘);

insert into s_8 values(‘female‘);

insert

into s_8 values(‘other‘);

select gender+0 from s_8;

枚举类型,最大允许65535个枚举

数据库做优化时,尽量都用枚举类型

九、集合类型

create table s_9(

hobby

set(‘basket‘,‘football‘,‘pingpang‘)

);

insert into s_9

values(‘basket,football‘);

select hobby+0 from s_9;

insert

into s_9 values(‘pingpang,football‘);

select hobby+0 from

s_9;

最多可以表示出64个状态。

表示的字符串长度不一样。

原文:http://www.cnblogs.com/luyuwei/p/3625178.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值