目录
字段类型后的数字
建表时我们在数字类型后习惯跟一个括号加数字
如int(11),varchar(20)等
那这些数字究竟有什么含义呢?
常见误解(包括我自己一开始也是想当人):
认为数字就是限制数据存储长度
下面我们揭开数据类型(m)
的真面目
数据类型(m) 来约束数据,其中 数字m在不同的数据类型中表示含义是不同的
在char和varchar中举例说明:
char(3) 最多能输入三个英文字母,或者3个汉字
varchar(6) 最多能输入6个英文字母,或者6个汉字
char类型的长度是固定的,varchar的长度是可变的。
这就表示,存储字符串’abc’,
使用char(10),表示存储的字符将占10个字节(包括7个空字符)
使用varchar2(10),,则表示只占3个字节,10是最大值,当存储的字符小于10时,按照实际的长度存储。
char类型的效率比varchar的效率稍高
但是整型数系统已经限制了取值范围,tinyint占1个字节、int占4个字节。
所以整型数后面的m不是表示的数据长度,而是表示数据在显示时显示的最小长度。
如int(1)和tinyint(1)中的1只是指定显示长度,并不表示存储长度
当字符长度超过(m)时,相当于啥都没发生,当字符长度小于(m)时,就需要指定拿某个字符来填充
int(11),tinyint(1),bigint(20),后面的数字,不代表占用空间容量。而代表最小显示位数,在设计mysql数据库时,
建表时,mysql会自动分配长度:int(11)、tinyint(4)、smallint(6)、mediumint(9)、bigint(20)。
所以,就用这些默认的显示长度就可以了。不用再去自己填长度,比如搞个int(10)、tinyint(1)之类的,基本没用。而且导致表的字段类型多样化。
TIMESTAMP VS DATETIME
两者都可用来表示YYYY-MM-DD HH:MM:SS类型。
TIMESTAMP会把客户端插入的时间从当前时区转化为UTC(世界标准时间)进行存储。查询时,将其又转化为客户端当前时区进行返回。
我当时做毕设时用的timestamp,发现数据库的时间和显示的时间不一样,以为哪搞错了,但是想着显示的没问题就没管它,
昨天才知道timestamp会做一个转换
而对于DATETIME,不做任何改变,基本上是原样输入和输出。
TIMESTAMP和DATETIME的存储时间范围:
timestamp所能存储的时间范围为:’1970-01-01 00:00:01.000000′ 到 ‘2038-01-19 03:14:07.999999’。
datetime所能存储的时间范围为:’1000-01-01 00:00:00.000000’ 到 ‘9999-12-31 23:59:59.999999’。
感觉还是datetime貌似牛逼些
但是跨时区项目还是用timestamp更好
json数据类型
mysql5.7及以上版本,开始引入JSON数据类型
如何使用JSON类型?
建表
在MySQL中创建具有JSON数据列的表,其实和数据类型没有太大区别,具体举例如下:
1 CREATE TABLE tab_base_info ( 2 id BIGINT NOT NULL PRIMARY KEY auto_increment, 3 content json 4 );
新增数据
插入一条语句,注意看JSON数据列的内容:
1 INSERT INTO tab_base_info (content) 2 VALUES 3 ( 4 '{"author": "wmx", "blog": "http://xinyeshuaiqi.cn"}' 5 );
- JSON列存储的数据要么是NULL,要么必须是JSON格式数据,否则会报错。
- JSON数据类型是没有默认值的(声明时”DEFAULT NULL”)。
JSON数据类型不允许有默认值, 我尝试设置默认值,报错
转载请注明:汪明鑫的个人博客 » mysql的一些小知识点
说点什么
您将是第一位评论人!