MYSQL数据类型

数据类型

类型属性

首先介绍两种类型属性: UNSIGNED和ZEROFILL

UNSIGNED

UNSIGNED属性就是将数字类型无符化。

ZEROFILL

如果宽度小于设定的宽度,则自动填充0,需要注意的是,这只是显示效果,在实际存储中还是原来的值。

a a int(4) unsigned zerofill;
#如果插入一个1,则显示0001

SQL_MODE设置

set global sql_mode = 'strict_trans_tables';
#或
set global sql_mode = 'strict_all_tables';#对所有引擎的表都启用严格模式。

上面一条语句将sql_model设为了严格模式。在这种模式下,如果一个值不能插入到一个事务表中,则中断当前的操作不影响非事务表。
sql_mode还有很多其他参数值。

日期和时间类型

各种日期数据类型及其所占用的空间

类型所占空间(字节)范围
DATETIME8“1000-01-01 00:00:00” - “9999-12-31 23:59:59”
DATE3“1000-01-01" - “9999-12-31”
TIMESTAMP4“1970-01-01 00:00:00” - “2038-01-19 03:14:07”
YEAR1
TIME3“-838:59:59” - “838:59:59”

year类型占用1字节,并且在定义时可以指定显示的宽度为year(4)或year(2)。对于year(4),其显示年份的范围为1901-2155;对于year(2),其显示年份的范围为1970-2070,在year(2)的设置下,00-69代表2000-2069年。
time类型不仅可以显示一天中的时间,也可以用来保存时间间隔。

与日期和时间相关的函数

  1. NOW(),CURRENT_TIMESTAMP()和SYSDATE()
  • NOW(),CURRENT_TIMESTAMP()是同义词,两者相等。
  • SYSDATE()函数返回的是执行到当前函数时的时间,而NOW()返回的是执行SQL语句时的时间。
  1. 时间加减函数
    DATE_ADD或DATE_SUB表示时间加减函数
date_add(now(),interval 1 day)

还可以使用的数据类型有year,second,minute,hour,week,month,microsecond.

  1. DATE_FORMAT函数

按照用户的需求格式化打印出日期。

select date_format(now(),'%Y%m%d') as datetime;

数字类型

整型

类型占用空间(字节)
TINYINT1
SMALLINT2
MEDIUMINT3
INT4
BIGINT8

每个整型都有unsigned和signed两种类型。

浮点型

MySQL数据库支持两种浮点类型:单精度的FLOAT和双精度的DOUBLE PRECISION类型。MySQL允许使用非标准语法:FLOAT(M,D)或REAL(M,D)或DOUBLE PRECISION(M,D)。这里,(M,D)表示该值一共显示M为整数,其中D表示小数点后面的位数。

高精度类型

DECIMAL和NUMERIC类型在MySQL中被视为相同的类型,用于保存必须为确切精度的值。最大位数为6,但具体的实际范围受具体列的精度或标度约束。

位类型

为类型,即BIT数据类型可用来保存位字段的值,BIT(M)类型表示允许存储M位数值。M范围为1到64,占用的空间为(M+7)/8字节。如果BIT(M)列分配的值的长度小于M位,在值的左边用0填充。

字符类型

通过命令show charset可以查看MySQL数据库支持的字符集。
命令set names可以用来更改当前会话连接的字符集、当前会话的客户端的字符集、以及当前会话返回结果集的字符集。

排序规则

排序规则(Collation)是指对指定字符集下不同字符的比较规则。

  • 两个不同的字符集不能有相同的排序规则。
  • 每个字符集有一个默认的排序规则。
  • 有一些常用的命名规则。如_ci结尾表示大小写不敏感(case insensitive)。_cs表示大小写敏感,_bin表示二进制的比较。

CHAR和VARCHAR

一般来说,CHAR(N)用来保存固定长度的字符串,N的范围0-255;VARCHAR(N)用来保存变长字符类型,N的范围0-65535。这里的N表示字符长度,而非字节长度。

BINARY和VARBINARY

BINARY(N)和VARBINARY(N),这里的N是字节长度,存储的是二进制字符串,而非字符型字符串。BINARY(10)其可存储的字节固定为10。

BLOB和TEXT

BLOB(Binary Large Object)是用来存储二进制大数据类型的。在大多数情况下可以将BLOB类型的列视为足够大的VARBINARY类型的列。同样也可以将TEXT类型的列视为足够大的VARCHAR类型的列。然而,BLOB和TEXT在以下方面又和VARBINARY,VARCHAR不同:

  • 在BLOB和TEXT上创建索引时,必须制定索引前缀长度,而VARBINARY,VARCHAR的长度是可选的。
  • BLOB和TEXT类型的列不能有默认值。
    在排序时只使用列的前max_sort_length个字节。

ENUM和SET类型

enum和set类型都是集合类型,不同的是enum类型最多可枚举65536个元素,而set类型最多枚举64个元素。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值