mysql列类型
mysql支持大量的列类型,它可以被分为3类:数字类型、日期和时间类型以及字符串(字符)类型。
1、TINYINT
一个很小的整数。有符号的范围是-128到127,无符号的范围是0到255。
2、SMALLINT
一个小整数。有符号的范围是-32768到32767,无符号的范围是0到65535。
3、MEDIUMINT
一个中等大小整数。有符号的范围是-8388608到8388607,无符号的范围是0到16777215。
4、INT
一个正常大小整数。有符号的范围是-2147483648到2147483647,无符号的范围是0到4294967295。
5、INTEGER
这是INT的一个同义词。
6、BIGINT
一个大整数。有符号的范围是-9223372036854775808到9223372036854775807,无符号的范围是0到18446744073709551615。
7、FLOAT
一个小(单精密)浮点数字。不能无符号。允许的值是-3.402823466E+38到-1.175494351E-38,0 和1.175494351E-38到3.402823466E+38。
8、DOUBLE
一个正常大小(双精密)浮点数字。不能无符号。允许的值是-1.7976931348623157E+308到-2.2250738585072014E-308、 0和2.2250738585072014E-308到1.7976931348623157E+308。
注意:
double 有效数字14位,float型有效数字7位,所以double精度高。
double 占内存 8 字节,float占内存 4 字节,float 省内存,运算速度快。
输入/输出格式 double 用 %lf, float 用 %f
1、DATE
一个日期。支持的范围是'1000-01-01'到'9999-12-31'。mysql> 以'YYYY-MM-DD'格式来显示DATE值,但是允许你使用字符串或数字把值赋给DATE列。
2、DATETIME
一个日期和时间组合。支持的范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。mysql> 以'YYYY-MM-DD HH:MM:SS'格式来显示DATETIME值,但是允许你使用
字符串或数字把值赋给DATETIME的列。
3、TIME
一个时间。范围是'-838:59:59'到'838:59:59'。mysql> 以'HH:MM:SS'格式来显示TIME值,但是允许你使用字符串或数字把值赋给TIME列。
4、YEAR
一个2或4位数字格式的年(缺省是4位)。允许的值是1901到2155,和0000(4位年格式),如果你使用2位,1970-2069( 70-69)。mysql> 以YYYY格式来显示YEAR值,
但是允许你把使用字符串或数字值赋给YEAR列。
1、CHAR(M)
一个定长字符串,当存储时,总是是用空格填满右边到指定的长度。M的范围是1 ~ 255个字符。当值被检索时,空格尾部被删除。
2、VARCHAR
一个变长字符串。注意:当值被存储时,尾部的空格被删除。
3、TINYTEXT
一个BLOB或TEXT列,最大长度为255(2^8-1)个字符。
4、TEXT
一个BLOB或TEXT列,最大长度为65535(2^16-1)个字符。
5、MEDIUMTEXT
一个BLOB或TEXT列,最大长度为16777215(2^24-1)个字符。
6、LONGTEXT
一个BLOB或TEXT列,最大长度为4294967295(2^32-1)个字符。
mysql> create table 表名(字段 float(5,3)); (5代表整个宽度,3代表小数点个数)
mysql> insert into 表名 set 字段=22.8888; 给记录赋值
mysql> select * from 表名; 查看表信息
mysql> create table 表名(字段 decimal(5,3)); (5代表整个宽度,3代表小数点个数)
mysql> insert into 表名 set 字段=22.8888;
mysql> select * from 表名;
float f = 345.98756f;--结果显示为345.9876,只显示7个有效位,对最后一位数四舍五入。
double d=345.975423578631442d;--结果显示为345.975423578631,只显示15个有效位,对最后一位四舍五入。
--注:float和double的相乘操作,数字溢出不会报错,会有精度的损失。
decimal dd=345.545454879.....--可以支持28位,对最后一位四舍五入。
--注:当对 decimal 类型进行操作时,数值会因溢出而报错。
mysql> create table t7(name char(3)); 3为数值个数
mysql> insert into t7 set name="aaaaa";
1 row in set (0.00 sec)
mysql> create table t7(name varchar(3));
mysql> create table t8(name enum('a','b','c'));
mysql> insert into w5 set id="aaabbbbbcccc";
1 row in set (0.00 sec)
上面说明enum值必须是a或b或c的其中一个,否则输入不进去记录
mysql> insert into t8 set name="a";
1 row in set (0.00 sec)
mysql> create table t8(name set('a','b','c'));
ERROR 1050 (42S01): Table 't8' already exists
mysql> create table t9(name set('a','b','c'));
Query OK, 0 rows affected (0.03 sec)
mysql> insert into t9 set name="a,b";
Query OK, 1 row affected (0.00 sec)
1 row in set (0.00 sec)
time 111111
time 11:11:11
date 111111
date 11/11/11
timestamp时间串类型 now为当前时间,这里空值是当前时间
--------------------------------------------------------------------------------------
09 --2009
0-69
70-99
mysql> create table t10(name year);
Query OK, 0 rows affected (0.04 sec)
mysql> insert into t9 set name=18;
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> insert into t10 set name=18;
Query OK, 1 row affected (0.00 sec)
1 row in set (0.00 sec)
mysql> insert into t10 set name=70;
Query OK, 1 row affected (0.00 sec)
| 2018 |
2 rows in set (0.00 sec)
mysql> insert into t10 set name=2089;
Query OK, 1 row affected (0.00 sec)
| 2018 |
| 1970 |
3 rows in set (0.00 sec)
mysql> insert into t10 set name=1789;
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> select * from t10;
datetime类型和timestamp时间戳类型,可以把当前的日期插入到他所修饰的字段里,年月日分钟小时秒
mysql> create table data8 (dt datetime,ts timestamp);
mysql> insert into data8 values('1999-01-01 10:10:10','1999-01-01 10:10:10'),(20010202121212,20010202121212);
| 1999-01-01 10:10:10 | 1999-01-01 10:10:10 |
2 rows in set (0.00 sec)
mysql> insert into data8 values(now(),null);显示当前日期
Query OK, 1 row affected (0.00 sec)
| 1999-01-01 10:10:10 | 1999-01-01 10:10:10 |
| 2001-02-02 12:12:12 | 2001-02-02 12:12:12 |
3 rows in set (0.00 sec)
[root@www ~]# date
2009年 12月 28日 星期一 14:18:21 CST
| 2009-12-20 |
| 1998-01-01 |
| 2008-10-10 |
4 rows in set (0.00 sec)
| 2009 |
| 1998 |
| 2008 |
4 rows in set (0.00 sec)
| 12 |
| 1 |
| 10 |
4 rows in set (0.00 sec)
| 20 |
| 1 |
| 10 |
4 rows in set (0.00 sec)
1 row in set (0.00 sec)
enum(复合类型)枚举类型
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
mysql> create table data9 (gender enum('m','f')); 创建这种表的时候必须预先定义好值,插入值的时候,只能插入预先定义好的值
mysql> insert into data9 values('m'),('F'),('ab');
| m |
| f |
3 rows in set (0.00 sec)
1 row in set (0.01 sec)
1 row in set (0.00 sec)
1 row in set (0.00 sec)
主要用于在一个表单里有性别的时候
set类型 跟enum差不多
enum 只能从事先定义好的值里选择一个值
但set不同
mysql> create table data10 (type set('a','b','c','d'));
mysql> insert into data10 values('a'),('a,b'),('a,e');
| a |
| a,b |
3 rows in set (0.00 sec)