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, 多操作就能理解 希望采纳
白板的微信
神不在的星期二
慕容708150
相关分类