前言:
之前我设计数据库的时候设了一个时间戳类似的create_time字段,昨天王总知道这个字段之后告诉我说这个时间戳最大到2038年,有资料为证(特别耐心向我展示了网上查的资料),我没有看直接改了,态度特别好,下午回想这件事情上感觉基础还是挺重要的,所以先从mysql做起吧【纯天然源自平常的收集】
mysql数据类型:
:菜鸟教程走一波
这个图是盗过来的,感觉画得不错就直接上传了一下,欢迎去原作 访问
整数:
- bit:1字节
无符号:[0~255]、有符号[-128~127]
bool:1字节
同上
1、tinyint:1个字节
无符号[0~255] 有符号[-128~127]
2、smallint:2个字节
无符号[0~65535]、有符号[-32768~32767]
3、mediumint:3个字节
无符号[0,2^24-1]:0~16777215,,有符号[-2^23,2^23-1]]
4、int:4个字节
无符号[0,2^32-1]:0~4294967295 ,有符号[-2^31,2^31-1]
5、bigint:8个字节
无符号[0,2^64-1]:0~1844674473709551615,有符号[-2^63 ,2^63 -1]
浮点数:
名词解释来一波:
1.1浮点数相当于一个定点数加上一个阶码,阶码表示将这个定点数的小数点移动若干位,由于可以用阶码移动小数点,因此称为浮点数。
1.2定点的意思是,小数点固定在 32 位中的某个位置,前面的是整数,后面的是小数;小数点具体固定在哪里,可以自己在程序中指定
float(M,D):4字节、单精度浮点数
M是精度,数据总长度,<=24则默认为float;D是标度,小数点后的长度,>24自动转换为double
double(M,D):8字节、双精度浮点数
decimal(M,D):M+2字节、压缩的“严格”定点数
整数超出范围 报错拒绝处理;M范围1~65,0时取默认值10,D范围0~30且<=M,默认值0
注意:当不指定精度时,默认保存实际精度,decimal默认是整数;标度不够将四舍五入,decimal有报警信息
时间类型:
year: 年份值,1个字节
按照字符串格式存储,查到一篇博客原来还有YEAR(4)和YEAR(2)的区别,前者范围1901~2155,后者范围1970~2070,在year(2)中00~69代表2000~2069,插入时可以代替具体年份进行插入
>
time:时间值或持续时间,3个字节,格式:‘HH:MM:SS’
范围:-838:59:59~838:59:59,不仅可以保存一天中的时间还可以保存间隔,可以显示微妙但是插入时会被截断,超出范围的值、不合法的值被转为00:00:00
date:日期值,3个字节,格式‘YYYY-MM-DD’、“YYYYMMDD”
范围:1000-01-01~9999-12-31,MySQL允许“不严格”语法:任何标点符号都可以用作日期部分之间的间隔符。
datetime:8字节、格式:‘YYYY-MM-DD HH:MM:SS’或‘YYYYMMDDHHMMSS’,按输入格式存储,输入什么存储什么,与时区无关
范围:‘1000-01-01 00:00:00’~‘9999-12-31 23:59:59’,Mysql5.5之前日期类型不能精确到微妙,任何微妙值会被截断.
不过MySQL数据库提供了函数MICROSECOND来提取日期中的微秒值:select microsecond(‘2000-01-01 00:00:00.123456’)
timestamp:混合日期时间值、时间戳,格式同上、4字节
范围:1970~2037、UTC世界标准时间存储,默认对当前时区进行转换,检索时再转换回当前时区(随设置的时区改变)
当timestamp与datetime无输入情况下:
- 系统会输入系统当前日期与时间,timestamp使用current_timestamp(),而datetime使用now来获取当前时间
- 输入null时,系统会输入当前日期与时间
字符串:存储字符串、声音和图片的二进制数据
text:
tinytext:范围0~255字节
存储空间:值的长度+2字节
text:范围0~55535
存储空间:值的长度+2字节
mediumtext:范围0~16777215
存储空间:值的长度+3字节
longtext:范围:0~4294967295
存储空间:值的长度+4字节
char:长度:设计时设置的固定长度,最长255
varchar:长度:实际存储值+1,最长65535
set:0个或多个值
创建表时指定取值范围
属性名 set(‘值1’,‘值2’……,‘值n’)
插入的值重复只取一个,自动按顺序插入排列,插入不正常值则忽略,可以看出是多选的enum
enum:
定义时指定取值范围
属性名 ENUM(‘值1’,‘值2’,‘值3’……,‘值n’)
定义时有not null属性,其默认值为列表的第一个元素
定义时无not null、则将容许插入null、且null为默认值
二进制类型
bit(M):保存位字段值,M位数<=64
BIN(b+0) from table_name(b为列名,b+0将二进制结果转换为对应的数字的值,BIN()函数将数字转换为二进制):bit(4)长度4,存储的值0-15,变二进制后15变1111;查询时用BIN(字段名+0)将值转换为二进制显示
binary(M)长度固定
容许长度 0~M的定长二进制字符串,长度不够补0
(M)长度可变
长度为0~M变长二进制字符串,字节数为值的长度+1
blog:二进制大对象,存储可变数量的数据(有[博客]将其归为字符串类型)
https://blog.csdn.net/xu758142858/article/details/46820199
- tinyblog:最多255字节
2 bolg:最多65535字节
3 mediumblog:最多16777215字节
4 longblog:最多4294967295字节(4GB)
其他:
geometry、point、multipoint、linestring、multilinestring、polygon、geometrycollection
1、整形:根据要显示的最大值决定
2、浮点数:要求精确到小数点后10位double,精度较高选择定点数decimal
3、字符串:定长与变长的区别,char处理速度比varchar快,定长选char,变长varchar
4、时间:需要显示的时间与时区对应,选择timestamp
5、enum和set:长度不同,enum>=65535,set>=64成员,enum单选,set多选
6、text和blob:text字符数据,blob二进制数据,纯文本适合text,图片二进制
函数:
concat(str1,str2)函数:
返回结果为 参数连接 产生的字符串,如果任何一个参数为null则返回值为null
concat_ws(separator,str1,str2)函数:
第一个参数是其他参数的分隔符,函数忽略分隔符参数后的null值
group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator ‘分隔符’])
repeat(‘str1’,int)
str1要复制的字符串,int复制的份数
mysql5.6.4始增加对秒的小数部分的支持,type_name(fsp)
使用建议:
- 1、路径中使用“\”时,会被过滤:用“/”或“\”来代替“\”
2、mysql中没有Bool、Boolean,但是可以定义,最后会转换成TinyInt(1)
3、指定数据类型的时候采用从小原则,提高运行效率
4、尽量不要有大杂烩的表,单一职责便于维护,数据库的设计结果是效率和可扩展性的折中,不偏不倚最好了
感谢分享:
https://blog.csdn.net/ja_java/article/details/69255904
https://www.cnblogs.com/doctorJoe/p/5337510.html
https://www.cnblogs.com/yingmo/p/6148360.html
https://blog.csdn.net/libo222/article/details/51508379
https://www.cnblogs.com/Caveolae/p/7058890.html
https://blog.csdn.net/xu758142858/article/details/46820199
愿世界与你 温柔以待