mysql 列数据类型_Mysql列数据类型

是否有符号喎�"https://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vc3Ryb25nPjwvcD4NCjxwcmUgY2xhc3M9"brush:sql;">

create table tab_int(

a tinyint unsigned,

b tinyint,

c SMALLINT,

d MEDIUMINT,

e INT,

f bigint

);

insert into tab_int values(255,-128,2423,-4323,-14432,4356546);

select * from tab_int;

定义数据的显示宽度

通过规定数据的显示宽度,达到统一的显示目的。

类型(m),m表示显示的最少宽度是多少。

增加字段

alter table tab_int add g tinyint(3);

insert into tab_int values(255,-128,2423,-4323,-14432,4356546,123);

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

alter table tab_int add h int(3) zerofill;

insert into tab_int values(255,-128,2423,-4323,-14432,4356546,123,2);

insert into tab_int values(255,-128,2423,-4323,-14432,4356546,123,1232);

insert into tab_int values(255,-128,2423,-4323,-14432,4356546,123,543);

58450226e6e35808dcf98a96b4867310.png

注意:

1、不影响数的范围。

2、宽度大的不会受到影响,不会被截取。

也存在布尔bool类型,但是就是tinyint(1)的别名。

小数

979c2e9a54454c5b607f806801ba6078.png

浮点数

单精度 默认是6位左右

双精度 默认是16位左右

create table num(

a float,

b double

);

insert into num values(1234567890.0123456789,1234567890.0123456789);

select * from num;

175f9829471008b3bcf48e488e5b7519.png

支持控制数值的范围

Type(M,D)

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

D表示允许的小数位数

create table num_1(

a float(5,2),

b double(8,3)

);

insert into num_1 values(123.01,12345.012);

select * from num_1;

不合法

insert into num_1 values(1234567890.0123456789,1234567890.0123456789);

insert into num_1 values(12.301,12345.012);

aa174c3fc343b208bed1828aaef6c478.png

支持科学计算法

insert into num_1 values(0.23E3,456.7E2);

select * from num_1;

608bb214c9a05be7a19e07830c3f3f1a.png

定点数(保证不会精度丢失)

decimal(M,D)

M总位数

D小数位数

create table num_2(

send_money decimal(10,2)

);

insert into num_2 values( 1234.56);

select * from num_2;

多出来的位数会四舍五入

insert into num_2 values( 1234.567);

9b2a836286071c497a0edfcb8d42c965.png

支持填充

alter table num_2 add money decimal(10,2) zerofill;

insert into num_2 values( 1234.567,1234.3234);

b60d8b0b2cf7dee1b8566a8ce1cec29f.png

支持无符号

日期时间类型

0a9e49953d0ccbf071200702c871c5a8.png

datetime类型

年月日时分秒 datetime 八个字节

时间戳 timestamp 存储时,整型;但是表示时,日期时间。 四个字节

年月日 dat

create table datetime1(

a datetime,

b timestamp

);

insert into datetime1 values('2015-04-16 11:50:21','2015-04-16 11:50:33');

select * from datetime1;

检索列时,+0可以检索时间

select a,b+0 from datetime1;

852b220ecf603d8a47a4312a1b7da483.png

支持任意格式的分隔符

insert into datetime1 values('20380119031422','20380119031422');

select a,b+0 from datetime1;

f3c9c08ab9baf21b8f381edae1623fd1.png

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

insert into datetime1 values('20:01:19','2038-01-19 03:14:08');

346a1eb42f6ceac5b021ad717f66225c.png

支持0值

insert into datetime1 values(0,0);

9e06e6add1047220b508b4e78b384bc7.png

表示当前是没有规定的

2013-04-0表示4月整个月。(逻辑想法)

insert into datetime1 values('2013-04-0','2038-01-19 03:14:08');

51d84018e1712a6a6792fa3d9381d6d2.png

Time类型

表示意义:

1、一天中的时间

2、表示时间间隔,在表示间隔时,可以使用天来表示

格式: D HH:MM:ss

create table t_1(

age time

);

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

insert into t_1 values('231211');

insert into t_1 values('5 23:12:11');

select * from t_1;

df30e3f8d9d767fd935c31730264c5a1.png

字符串类型

bcba70323c7c57b788c1ef2e76451d37.png

char(M) 固定长度

M表示严格限定的长度。

varchar(M) 可变长度

M表示允许的字符串长度。

char(5) varchar(5)

'' 5个字符 1个字符

'abc' 5个字符 4个字符

'abcde' 5个字符 6个字符

varchar需要一个字节保存字符串的总长度。

M表示字符数而不是字节数。

但是总的长度是按照字节计算。char最大255个字节。

例如如下会报错。

create table s_1(

a varchar(65535)

) character set utf8;

create table s_2(

a varchar(65535)

) character set gbk;

76164304d0cfefe918e2d59343a6e0cf.png

注意:

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

真实的varchar的长度:总长度65535

varchar特点:

当类型数据超过255时,采用2个字节表示长度。

65535-2=65533

整条记录,需要一个额外的字节,用于保存当前字段的null值。因此,只有65532

如果有设置为not null,则可以有65533个字节。

create table s_3(

a varchar(65531),

b tinyint

)character set latin1;

create table s_4(

a varchar(65532) not null,

b tinyint not null

)character set latin1;

除非所有的字段都不是null,这个字节才可以省略。一个记录,无论有多少个字段存在null,都是使用统一的一个字节来表示。而不是每个字段一个字节。

text(文本)

text有很多类型。 tinytext,longtext表示字符串长度不一样。

create table s_5(

a text,

b text

)character set latin1;

enum

看上去是字符串,内部存储整型表示字段值,只能是某一个。最保存65536个枚举项。

create table s_6(

gender enum('female','male')

);

insert into s_6 values('male');

select gender+0 from s_6;

d39496ffb86be2874aee1a37c4f6cd85.png

Set

8个字节,最多表示64个状态,一个状态一个位。

1 10 100

drop table s_7;

create table s_7(

hobby set('basket','football','pingpang')

);

insert into s_7 values('basket,football');

insert into s_7 values('football,pingpang');

select hobby from s_7;

select hobby+0 from s_7;

e7826dd5eed47bdc75bcbbb73b54c012.png

如何选择列类型?

1、应该使用最精确的类型。占用的空间少。

2、还应该考虑到相关应用语言的处理。例如常常将时间日期保存成一个整型,便于计算。

3、考虑移植的兼容性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值