mysql支持多种数据类型主要包括:数值类型,日期/时间类型,字符串类型、二进制类型。
TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT,FLOAT,DOUBLE,定点小数类型DECIMAL
不论是定点类型还是浮点类型,如果用户指定精度超过精度范围,则会四舍五入。
int(M),当不指定M值时候默认为11,选项有unsigned zerofill。m指定数据显示的宽度,例如int(5)
mysql@ [rmmdb] 20:16: >create table tint1(id int(10));
Query OK, 0 rows affected (0.09 sec)
mysql@ [rmmdb] 20:22: >insert into tint1 values(1);
Query OK, 1 row affected (0.03 sec)
mysql@ [rmmdb] 20:22: >select *from tint1;
+------+
| id |
+------+
| 1 |
+------+
1 row in set (0.00 sec)
mysql@ [rmmdb] 20:22: >select length(id) from tint1;
+------------+
| length(id) |
+------------+
| 1 |
+------------+
1 row in set (0.05 sec)
mysql@ [rmmdb] 20:22: >
create table t1(id int,id1 int(19),id2 int(10) unsigned zerofill,id3 int(5) unsigned zerofill);
YEAR,TIME,DATE,DATETIME,TIMESTAMP
如果只记录年份则使用year类型即可。
如果只记录时间则使用time类型即可。
如果记录日期和时间则使用datetime或者timestamp,最好采用datetime。
mysql允许不严格的时间语法插入格式,任何标点符号都可以作为日期部分的间隔符号。
例如:19@01@12,180101, 12。12.。12,等字符串的表示都是等价的。
最后两位为ss,10点21分如果写成1021则入库为00:10:21
4 08为4*24+8 :00:00
datetime和timestamp存储字节不同,timestamp会根据查询的时区变化。
主要包括文本字符串和二级制字符串
char varchar tinytext text mediumtext logtext enum和set
1 char和varchar,CHAR(M)是固定长度字符创,不够用空格补齐,取值范围0-255.当检索到char类型时后面的空格将被删除。
mysql> select id from monidb.t;
+----+
| id |
+----+
| c |
+----+
1 row in set (0.08 sec)
mysql> select length(id) from monidb.t;
+------------+
| length(id) |
+------------+
| 1 |
+------------+
1 row in set (0.02 sec)
varchar(0-65536),占用空间为实际长度+1
char(0-255) 固定长度。
char(5)和varchar(5)的区别,,,对于'a '的查询CHAR只显示a,varchar显示'a '
MYSQL运行在严格模式下超长插入会报错,在不严格模式条件下,会截断字符串。
mysql> set sql_mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
-> ;
Query OK, 0 rows affected (0.00 sec)mysql>
mysql> insert into t values('abcdefg','abcdefg');
Query OK, 1 row affected, 2 warnings (0.00 sec)mysql> commit;
Query OK, 0 rows affected (0.00 sec)mysql> select * from t;
+-------+-------+
| id1 | id2 |
+-------+-------+
| a | a |
| abcde | abcde |
+-------+-------+
2 rows in set (0.00 sec)mysql>
mysql> insert into monidb.t(id) values('a ');
Query OK, 1 row affected (0.10 sec)
mysql> commit;
Query OK, 0 rows affected (0.00 sec)
mysql> select length(id) from monidb.t;
+------------+
| length(id) |
+------------+
| 3 |
| 1 |
| 2 |
+------------+
3 rows in set (0.03 sec)
mysql> alter table monidb.t modify id char(5);
Query OK, 3 rows affected (0.07 sec)
mysql> select length(id) from monidb.t;
+------------+
| length(id) |
+------------+
| 1 |
| 1 |
| 2 |
+------------+
3 rows in set (0.08 sec)
enum枚举类型,(‘var1','var2',var3') ,包含null值(没有not null约束的话)
mysql> create table emn(sex enum('boy','girl') not null default 'boy')
-> ;
Query OK, 0 rows affected (0.11 sec)
mysql> des emn
-> ;
ERROR 1064 (42000):
mysql> desc emn
-> ;
+-------+--------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------------+------+-----+---------+-------+
| sex | enum('boy','girl') | NO | | boy | |
+-------+--------------------+------+-----+---------+-------+
1 row in set (0.13 sec)
set(‘var1','var2',var3') ENUM只能在变量中选择,而set 可以是其中变量的组合。