MENU

MySQL学习系列(一)

June 9, 2016 • MySQL

数据类型

整型

类型大小范围存储需求有符号无符号
TINYINT微小1 byte-128~1270~255

字符串类型

字符串类型是一个统称,包含多种不同的数据类型
分为文本字符串和二进制字符串
不仅可以存储字符串,还可以存储其他数据
字符串可以区分或者不区分大小写的字符串比较
支持进行模式匹配查找

类型大小范围用途存储需求
CHAR(M)0-255 bytes定长字符串M bytes 1 <= M <=255
VARCHAR(M)0-65535 bytes变长字符串L+1 bytes

PS:在MySQL5.5以后默认的sql_mode已经被设置为严格模式
如果在严格模式下,插入超过指定的字符串长度不会被默认截取,而是直接报错。

mysql> show variables like 'sql_mode';
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
| Variable_name | Value                                                                                                                                     |
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
| sql_mode      | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

设置不严格模式
mysql> set sql_mode='';
查看警告信息
mysql> show warnings;

浮点型

浮点数和定点数类型是用来存储带小数的数值
使用(M, D)的方式设定M精度(或显示的位数)和D标度(小数的位数)

类型数值范围存储要求有符号无符号
FLOAT单精度浮点数4 bytesxxxx
DOUBLE双精度浮点数8 bytesxxxx
DECIMAL定点数M>D, M+2
M<D, D+2
依赖M和D的值依赖M和D的值
mysql> desc t6;
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| col1  | float(3,2) | YES  |     | NULL    |       |
+-------+------------+------+-----+---------+-------+
1 row in set (0.00 sec)

mysql> INSERT INTO `t6` VALUES (33.3); // 这句报错
ERROR 1264 (22003): Out of range value for column 'col1' at row 1)

虽然设置的是3位长度的浮点类型,但是mysql在设置类型的时候就已经预留了2位作为小数点后2位,所以个位数字只能是一位数字。

DECIMAL: 如果不指定M则默认为10,默认D为0

日期和时间类型

类型格式存储要求 <th colspan="2">范围</th>
YEAR(M)YYYY/YY1 byte1901/19702155/2069
DATETIMEYYYY-MM-DD HH:MM:SS8 bytes1000-01-01 00:00:009999-12-31 23:59:59
TIMESTAMPYYYY-MM-DD HH:MM:SS4 bytes1970-01-01 00:00:00 UTC2038-01-19 03:14:07 UTC

TIMESTAMP: 受系统时区的影响
查看时区:mysql> show variables like 'time_zone'
修改时区:mysql> set time_zone='+10:00'