MySQL支持的数据类型

数值类型

对于任何想要使用AUTO_INCREMENT的列,应该定义为NOT NULL,并定义为PRIMARY_KEY或定义为UNIQUE键。

定点数decimal,如果不写精度和标度,则默认按照decimal(10,0)来进行操作。

数据插入bit类型字段时,首先转换为二进制,如果位数允许,将成功插入;如果位数小于实际定义的位数,则插入失败。

日期时间类型

MySQL规定TIMESTAMP类型字段只能有一列的默认值为current_timestamp。

mysql> create table t1 (id1 timestamp,id2 timestamp);
ERROR 1067 (42000): Invalid default value for 'id2'

TIMESTAMP还有一个重要的特点就是和时区相关。当插入日期的时候,会先转为本地时区后存放;而从数据库取出时,也同样需要转换为本地时区后显示。这样,两个不同时区的用户看到的同一个日期可能是不一样的。

datetime:
mysql> create table t6 (dt datetime);
Query OK, 0 rows affected (0.02 sec)

mysql> insert into t6 values('2017-11-28 12:10:10');
Query OK, 1 row affected (0.01 sec)

mysql> insert into t6 values('2017/11/28 12+10+10');
Query OK, 1 row affected (0.00 sec)

mysql> insert into t6 values('20171128121010');
Query OK, 1 row affected (0.00 sec)

mysql> insert into t6 values(20171128121010);
Query OK, 1 row affected (0.01 sec)

mysql> select * from t6;
+---------------------+
| dt                  |
+---------------------+
| 2017-11-28 12:10:10 |
| 2017-11-28 12:10:10 |
| 2017-11-28 12:10:10 |
| 2017-11-28 12:10:10 |
+---------------------+
4 rows in set (0.00 sec)

字符串类型

char列删除了尾部的空格,而varchar则保留这些空格。
mysql> create table vc(v varchar(4), c char(4));
Query OK, 0 rows affected (0.03 sec)

mysql> insert into vc values('ab  ', 'ab  ');
Query OK, 1 row affected (0.01 sec)

mysql> select length(v),length(c) from vc;
+-----------+-----------+
| length(v) | length(c) |
+-----------+-----------+
|         4 |         2 |
+-----------+-----------+
1 row in set (0.01 sec)

mysql> select concat(v, '+'),length(c, '+') from vc;
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'length'
mysql> select concat(v, '+'),concat(c, '+') from vc;
+----------------+----------------+
| concat(v, '+') | concat(c, '+') |
+----------------+----------------+
| ab  +          | ab+            |
+----------------+----------------+
1 row in set (0.01 sec)
ENUM类型

枚举
mysql> create table t2 (gender enum('M','F'));
Query OK, 0 rows affected (0.04 sec)

mysql> insert into t2 values ('M'),('1'),('f'),(NULL);
Query OK, 4 rows affected (0.01 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> select * from t2;
+--------+
| gender |
+--------+
| M      |
| M      |
| F      |
| NULL   |
+--------+
SET类型
mysql> create table t3(col set ('a','b','c','d'));
Query OK, 0 rows affected (0.02 sec)

mysql> insert into t3 values ('a,b'),('a,d,a'),('a,b'),('a');
Query OK, 4 rows affected (0.01 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> select * from t3;
+------+
| col  |
+------+
| a,b  |
| a,d  |
| a,b  |
| a    |
+------+

对于超出允许范围的值例如('a,d,f')将不允许注入到表中,而对于('a,d,a')这样的=包含重复成员的集合将只取一次,写入的结果为'a,d'。

发表评论

电子邮件地址不会被公开。 必填项已用*标注