MySQL基础(1) | 数据类型
MySQL基础(1) | 数据类型
- 数值类型
|
|
- 时间类型
|
|
- 字符串类型
|
|
解析
① 区分字节型和字符型
-
BINARY(N)
和VARBINARY(N)
中的N指的是字节长度。 -
CHAR(N)
和VARCHAR(N)
中N指的是的字符长度。 -
对于
BINARY(10)
,其可存储的字节固定为10,而对于CHAR(10)
,其可存储的字节视字符集的情况而定。
②区分BINARY,VARBINARY ,CHAR,VARCHAR 四类插入和查询的不同机制
-
char(N)用来存储非二进制字符串,插入时,对于少于N个字符的会自动在尾部加空格,查询时,尾部的空格就会被丢弃掉【即插入时尾部的空格会被去掉】
-
vachar(N) 用来存储非二进制字符串,插入时,对于少于N个字符的不填补空格,查询时,尾部的空格不会被丢弃掉【即原样输出】
-
binary(N)存储二进制字符串,插入进,少于N个字节的会自动在尾部加0x00,取出时,所有的字节都保留,返回定义长度的字节长度,在比较的时候,所有的字节都是有效的【尾部会填充\0】
-
varbinary在插入不会去填补0x00字节,查询的时候也不会丢弃任何字节,在比较的时候,所有的字节都是有效的【也是原样输出】
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13
create table test( a VARCHAR(3), b CHAR(3), c VARBINARY(3), d BINARY(3) )engine=innodb charset=gbk; insert into test select 'a ','a ','a ','a '; select hex(a),hex(b),hex(c),hex(d) from test; select concat('$',a,'$'),concat('$',b,'$'),concat('$',c,'$'),concat('$',d,'$') from test; SELECT a = 'a ', b = 'a', c = 'a ', d = 'a \0'from test;
结果集1:
结果集2:
结果集3:
- 扩展
-
VARCHAR:
在mysql中必须满足最大行宽度限制,也就是 65535(64k)字节,而varchar本身是按字符串个数来定义的【即varchar(xxx)括号内的xxx按字符串个数来定义】;在mysql中使用uft-8字符集一个字符占用三个字节,所以单表varchar实际占用最大长度是(65535-2)/3=21844个字符(超过255个字节会有2字节的额外占用空间开销,所以减2;如果是255以下,则减1)。
示例:
|
|
-
TEXT:
最大限制也是64k个字节,但是本质是溢出存储。innodb默认只会存放前768字节在数据页中,而剩余的数据则会存储在溢出段中,虽然也受单表65535最大行宽度限制,但mysql表中每个BLOB和TEXT列实际只占其中的5至9个字节,其他部分将进行溢出存储。所以实际占用表最大行宽度为9+2字节,外加的是额外开销,跟表的实际宽度没有关系。
-
获取当前时间的方法
SELECT CURRENT_TIMESTAMP;
SELECT CURRENT_TIMESTAMP();
SELECT NOW();
SELECT LOCALTIME;
SELECT LOCALTIME();
SELECT LOCALTIMESTAMP;
SELECT LOCALTIMESTAMP();
- 字符串转时间
select str_to_date('2017-10-16 15:30:28','%Y-%m-%d %H:%i:%s');
- 时间转字符串
select date_format(now(), '%Y-%m-%d %H:%i:%s') ;
- 通用类型转换方法
|
|
- 原文作者:赛蜗牛
- 原文链接:https://blog.saiwoniu.com/post/MySQL%E5%9F%BA%E7%A1%801-%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。