为了账号安全,请及时绑定邮箱和手机立即绑定

bigint(20)、smallint(5)

bigint(20)、smallint(5)

暮色呼如 2019-03-20 18:14:50
CREATE TABLE `idc_logistics_assign_rules` (  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',  `sp_id` bigint(20) unsigned NOT NULL COMMENT '外键关联表ID',  `creator` varchar(255) NOT NULL COMMENT '创建人工号',  `gmt_create` datetime NOT NULL COMMENT '创建时间',  `modifier` varchar(255) NOT NULL COMMENT '修改人工号',  `gmt_modified` datetime NOT NULL COMMENT '修改时间',  `rule_name` varchar(255) NOT NULL COMMENT '规则名称',  `rule_json_val` varchar(4096) NOT NULL COMMENT '规则JSON字符串',  `rule_content` varchar(4096) NOT NULL COMMENT '规则中文描述',  `type` varchar(128) NOT NULL COMMENT '类型(同机房、同城、区域内、区域外、其他)',  `rule_lable` varchar(256) NOT NULL COMMENT '标签',  `is_valid` char(1) NOT NULL COMMENT '是否有效(y/n),默认n',  `is_deleted` char(1) NOT NULL COMMENT '是否删除',  `ordering` smallint(5) unsigned NOT NULL COMMENT '排序字段',  PRIMARY KEY (`id`),  UNIQUE KEY `uk_ordering` (`ordering`),  KEY `idx_rule_content` (`rule_content`(255))) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COMMENT='表名';上面是建表的SQL语句,对于其中的数据类型有不明白的地方,如下:1.smallint(5),我看了smallint本来的范围是:A smallint is between -32768 and 32767 signed, or 0 and 65535 unsigned.但是加了smallint(5)之后,对它的范围并没有影响,那么加这个有什么用呢?。假如我不指定括号中的位数呢?它的默认值是要取什么值呢?2.同理varchar(255)是表示255个字节么?如果要存中文的话,用utf8编码,算上标点符号,大概能存多少个中文汉字呢?3.另外还有datetime这种数据类型,一般并不指定有效位数的。那么如果我要精确到秒的、精确的分的、精确到月的,数据库中是不能直接这么存的么?只能存一个完整的时间(存一个以1970开始的long型方便),然后查的时候,可以用Mysql提供的函数来过滤??======================================================================在列中使用zerofill,如插入int(4),你插入1,显示0001,你插入55555,显示也是55555,插入负数显示为0000,因为mysql自动增加UNSIGNED属性 UNSIGNED不能为负数,当你插入负数时就显示0, 多操作就能理解 希望采纳
查看完整描述

5 回答

?
白板的微信

TA贡献1883条经验 获得超3个赞

  • 类似int这种的是字节括号后面的没影响;

  • 类似char这种的是字符,括号里限定的就是字符长度


查看完整回答
反对 回复 2019-04-22
?
神不在的星期二

TA贡献1963条经验 获得超6个赞

1-整齐好看
2-大概是255/3吧,没太仔细研究过
3-通常是都是bigint的时间戳或者timestamp/datetime类型,输出的时候php可以格式化输出,不需要mysql这边处理。


查看完整回答
反对 回复 2019-04-22
?
慕容708150

TA贡献1831条经验 获得超4个赞

1.smallint默认值是6,因为符号位。对范围没有影响,该怎么显示怎么显示,但是你在SMALLINT(3) 后面加上ZEROFILL就可以看出两者的差别了
2.varchar(255)表示255个字符,不是字节,这个你可以实验一下,不过也有人说老版本是字节。如果是字符的话就可以存255个中文了,字节就是255/3,因为一个中文是一个字符,而一个字符在UTF8里面算3个字节。
3.这个主要还是你后台对时间进行分割处理,可以多加几个年月日时分秒的字段。当然mysql也是有函数可以处理的,如:HOUR(time),SECOND(time),MONTH(time)

查看完整回答
反对 回复 2019-04-22
  • 5 回答
  • 0 关注
  • 1340 浏览

添加回答

代码语言

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号