当前位置:   article > 正文

数据库_MySQL: mysql数据类型的用法介绍_mysql数据类型与使用

mysql数据类型与使用

更过MySQL使用,点击查看专栏: MySQL数据库_命令详解

MySQL数据类型

建表语法

【语法】
create table [if not exists] `表名`(
字段名 字段类型 [null|not null][default][auto_increment][primary key][comment 备注],
字段名 字段类型,
.....
字段名 字段类型
)[engine=存储引擎] [charset=编码] [collate=校对集];

【说明】
[if not exists] `表名`     判断表是否存在:存在-不管,不存在-创建
[null|not null]			  声明字段值是否可以插入null数据
[default]			     声明字段值如果没有录入数据则使用默认值
[primary key]			  主键(特点:字段值不能重复且不能为null[auto_increment]		  自增(该属性必须配合primary key效果字段值自动增长123[comment 备注]             声明字段的作用
[engine=存储引擎]          存储引擎
[charset=编码]             数据存储编码
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

字节

1字节(Byte)= 8位(bit)
1KB = 1024 Byte(字节)

英文:1个字符 = 1个字节
中文:1个字符 = 等于3个字节(utf-8) 等于2个字节(gbk)
注意字符串类型对应的中文为字符。

1、数值型(整数)

类型字节范围(有符号)范围(无符号)
TINYINT1-128 ~ 1270 ~ 255
SMALLINT2-32768 ~ 327670 ~ 65535
MEDIUMINT3-8388608 ~ 83886070 ~ 16777215
INT4-2147483648 ~ 21474836470 ~ 4294967295
BIGINT8-9223372036854775808 ~ 92233720368547758070 ~ 18446744073709551615

无符号数(unsigned)

create table tint2 (num tinyint(10) unsigned) charset=utf8;
insert into tint2 values (0);
insert into tint2 values (255);
...
  • 1
  • 2
  • 3
  • 4

tinyint(10)其中10表示存储宽度(存储宽度指:当插入数据位数不够则自动从左侧补0,必须加zerofill属性宽度才会生效)

2、数值型(小数)

  • 浮点型,特点:小数点浮动,有精度丢失
  • 定点型,特点:小数点固定,不会丢失精度
浮点数语法占用字节范围精度范围
单精度float(总长度,小数长度)4-3.4E+38~3.4E+38大概为7位左右
双精度double(总长度,小数长度)8-1.79E+308~1.79E+308大概为15位左右
定点数decimal(最大65,最大30)依赖于M和D的值

实际业务中的选择:

  • 未涉及到资金小数可以用浮点型(float或double) 优先用float
  • 涉及资金用decimal(注:decimal小数位一般2位如果没有小数会用0自动补充)例如:金钱money decimal(10,2)

3、日期类型

数据类型描述格式占用字节
datetime日期时间年-月-日 小时:分钟:秒8
date日期年-月-日4
time时间小时:分钟:秒3
year年份1
timestamp时间戳年-月-日 小时:分钟:秒4

datetime(占8个字节)和timestamp(占4个字节)在表现上是一样。

timestamp和datetime的区别

  1. 存储范围:
    timestamp所能存储的时间范围为:‘1970-01-01 00:00:01.000000’ 到 ‘2038-01-19 03:14:07.999999’。(原因是timestamp只占用了4个字节,而2038年01月19日11:14:07秒后就超过了4个字节的长度)
    datetime所能存储的时间范围为:‘1000-01-01 00:00:00.000000’ 到 '9999-12-31 23:59:59.999999’。
  2. 储存方式不同
    timestamp,它把客户端插入的时间从当前时区转化为UTC(世界标准时间)进行存储。查询时,将其又转化为客户端当前时区进行返回。
    datetime,不做任何改变,基本上是原样输入和输出。
  3. timestamp会自动初始化和更新
    插入一个timestamp的字段后,字段属性会显示timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    (自动初始化指的是如果对该字段没有显性赋值,则自动设置为当前系统时间。
    自动更新指的是如果修改了其它字段,则该字段的值将自动更新为当前系统时间。)

实际业务中的选择:

参考文章:should-i-use-the-datetime-or-timestamp-data-type-in-mysql
MySQL中的timestamp通常用于跟踪记录的更改,并且通常在每次更改记录时进行更新。如果要存储特定值,则应使用datetime字段。 如果您想在使用UNIX时间戳还是本机MySQL日期时间字段之间做出选择,请采用本机格式。您可以通过这种方式在MySQL中进行计算, ("SELECT DATE_ADD(my_datetime, INTERVAL 1 DAY)")并且("SELECT UNIX_TIMESTAMP(my_datetime)")如果要使用PHP对记录进行查询,则可以很容易地将值的格式更改为UNIX时间戳。

ps. 在实际运用中时间类型使用int类型,但是也有公司使用datetime
说明:
选择int类型原因:int比datetime更节省空间
选择datetime类型原因:int同timestamp最大存储时间为2038年
为什么选择int的公司比datetime多

项目不同页面所需格式int类型datetime类型
2017/3/8date('Y/m/d’,时间戳)先转时间戳,再date函数
2048-3-16date('Y-m-d’,时间戳)先转时间戳,再date函数
2014/03/33 12:30:02date(‘Y/m/d H:i:s’,时间戳)直接显示
刚刚、24小时前…调用函数传递时间戳先转时间戳,再调用函数

4、字符串型

数据类型描述
char(长度)定长字符(最多255个字符)
varchar(长度)可变长度字符(65535个字符)
tinytext大段文本(大块数据) 2^8-1=255个字符
text大段文本(大块数据) 2^16-1=65535个字符
mediumtext2^24-1 = 16777215个字符
longtext2^32-1 = 4294967295个字符

char的执行效率比varchar高(varchar回收空间、char不回收)

实际业务中的选择:

明确数据长度选择char反之用varchar,如:性别char(1) 标题varchar(60)

文章内容或者大块文字时选择text

5、枚举(enum)

只能从集合数据中获取一个值(单选)

语法:sex enum(‘男’, ‘女’)

MySQL枚举值是通过整型的数字来管理的,第一个值对应1,第二个值对应2依次类推

后期推荐使用tinyint类型:1-男,2-女

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/904488
推荐阅读
相关标签
  

闽ICP备14008679号