Welcome everyone

mysql的一些小知识点

mysql 汪明鑫 117浏览 0评论

字段类型后的数字

建表时我们在数字类型后习惯跟一个括号加数字

如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的一些小知识点

喜欢 (0)

说点什么

您将是第一位评论人!

提醒
avatar
wpDiscuz