Mysql的字段长度

varchar(n),n表示什么?
MySQL5.0.3之前varchar(n)这里的n表示字节数
MySQL5.0.3之后varchar(n)这里的n表示字符数,比如varchar(200),不管是英文还是中文都可以存放200个

参考:https://blog.csdn.net/zgdwxp/article/details/90675967

CHAR和VARCHAR

CHAR(4),最多存储4个字符,不足4个尾部用空格填满。存储字节数 = 数据值的字节和 + 补位空格数
VARCHAR(4),最多存储4个字符,有几个字符存储几个。存储字节数 = 数据值的字节和 + 1字节(长度标识)

整数类型

整数是定长类型,长度为字节数
常见的INT(4)只是设置了显示宽度,不影响存储长度。
即不管TINYINT(1) TINYINT(2) TINYINT(3)TINYINT(4)
可以插入表的都是-128-127的正整数


tinyint(1) 和 tinyint(4) 中的1和4并不表示存储长度,只有字段指定zerofill是有用,
如tinyint(4),如果实际值是2,如果列指定了zerofill,查询结果就是0002,左边用0来填充。
注解:也就是说只有要求编码等特殊格式字段采用zerofill
注解:有可能存储大于最大值时候不报错,但是一定是报警告

-无符号的(unsigned)
-有符号的(signed)

类型 容量(Bytes) 最小(signed) 最大(signed) unsigned范围
TINYINT 1 -128 127 0~255
SMALLINT 2 -32768 32767 0~65,535
MEDIUMINT 3 -8388608 8388607 0~16777215
INT 4 -2147483648 -2147483648 0~4294967295
BIGINT 8 -263 =9223372036854775808 263-1 =9223372036854775807 0~18446744073709551615

日期与时间

描述 显示格式 取值范围
YEAR YYYY 0000、1901~2155
DATE 有日期、没有时间 YYYY-MM-DD 1000-01-01 ~ 9999-12-31
TIME 时分秒 hh:mm:ss -838:59:59 ~ 838:59:597
DATETIME 包含日期和时间 YYYY-MM-DD hh:mm:ss 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
TIMESTAMP 包含日期和时间 YYYY-MM-DD hh:mm:ss 1970-01-01T00:00:01Z ~ 2038-01-19T03:14:07Z

时间类型小结

日常使用中,时间类型的选择是一个比较头疼的问题,有提倡DATETIME或TIMESTAMP,有受TIMESTAMP启发、建议直接存储INT或BIGINT的。
我们从下面几个维度比较:

取值范围:DATETIME > TIMESTAMP = INT
时间精度:DATETIME = TIMESTAMP > INT
存储开销(同等精度):DATETIME > TIMESTAMP = INT
可自动更新:DATETIME和TIMESTAMP支持ON UPDATE,INT不支持
查询性能:因为底层都是转换为整数存储,不考虑存储空间优化,几种类型性能几乎相同。
如果不考虑存储、对细微的性能感受不大、对时间范围要求较高,建议选择DATETIME;
如果考虑存储、且对时间范围要求不高,建议选择TIMESTAMP。
INT的代码处理成本较高,不建议;BIGINT虽然可以解决UNIX 2038问题,但代码处理成本高,而且相信MySQL未来会提供标准解决方案

暂无评论

发送评论 编辑评论


				
上一篇
下一篇