Mysql数据类型

来源:互联网 发布:手机淘宝闲鱼在哪里找 编辑:程序博客网 时间:2024/05/22 15:29
1.整型(xxxint)
MySQL数据类型 含义
tinyint(m)            1个字节表示(-128~127)(0-255)
smallint(m) 2个字节表示(-32768~32767)(0-65535)
mediumint(m) 3个字节表示(-8388608~8388607)(0-16777215)
int(m)                  4个字节表示(-2147483648~2147483647)(0-4294967295)
bigint(m)            8个字节表示(+-9.22*10的18次方)(0-18446744073709551615)

--UNSIGNED 修饰符规定字段只保存正值。因为不需要保存数字的正、负符号,可以在储时节约一个“位”的空间。从而增大这个字段可以存储的值的范围
--ZEROFILL 修饰符规定 0(不是空格)可以用来真补输出的值。使用这个修饰符可以阻止 MySQL 数据库存储负值。 

mysql> desc test;
+-------+--------------------------+------+-----+---------+-------+
| Field | Type                     | Null | Key | Default | Extra |
+-------+--------------------------+------+-----+---------+-------+
| age   | int(3) unsigned zerofill | YES  |     | NULL    |       |
+-------+--------------------------+------+-----+---------+-------+
1 row in set

mysql> insert into test values(1),(10),(100),(1000);
mysql> select * from test;
+------+
| age  |
+------+
|  001 |
|  010 |
|  100 |
| 1000 |
+------+
4 rows in set (0.00 sec)

mysql> insert into test values(-1);
ERROR 1264 (22003): Out of range value for column 'age' at row 1


2.浮点型(float和double) 
MySQL数据类型 含义
float(m,d) 单精度浮点型,8位精度(4字节),m是十进制数字的总个数,d是小数点后面的数字个数
double(m,d) 双精度浮点型,16位精度(8字节)
参数m只影响显示效果,不影响精度,d却不同,会影响到精度。比如设一个字段定义 


3.定点数(decimal) 
decimal(m,d) 定点类型浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值。参数m是定点类型数字的最大个数(精度),范围为0~65,d小数点右侧数字的个数,范围为0~30,但不得超过m。
  对定点数的计算能精确到65位数字。 如果M>D,为M+2否则为D+2 依赖于M和D的值 依赖于M和D的值


4.字符串(char,varchar,xxxtext) 
MySQL数据类型 含义
char(n)                                   固定长度的字符串,最多255个字符
varchar(n)                              固定长度的字符串,最多65535个字符
tinytext tinyBlob                     可变长度字符串,最多255个字符
text blob                                  可变长度字符串,最多65535个字符
mediumtext mediumBlob 可变长度字符串,最多2的24次方-1个字符
longtext longBlob                  可变长度字符串,最多2的32次方-1个字符 
ENUM(“value1”, “value2”, ...) 65535 个成员1 或2字节  
SET (“value1”, “value2”, ...)    64个成员1、2、3、4 或8字节   

--ENUM 类型因为只允许在集合中取得一个值,在处理相互排拆的数据时容易让人理解,比如人类的性别。ENUM 类型字段可以从集合中取得一个值或使用 null 值,除此之外的输入将会使 MySQL 在这个字段中插入一个空字符串。
另外如果插入值的大小写与集合中值的大小写不匹配,MySQL 会自动使用插入值的大小写转换成与集合中大小写一致的值。如列为not null 则默认值为允许的值列表的第1个元素

--SET 类型可以从预定义的集合中取得任意数量的值。并且与 ENUM 类型相同的是任何试图在 SET 类型字段中插入非预定义的值都会使 MySQL 插入一个空字符串。
如果插入一个即有合法的元素又有非法的元素的记录,MySQL 将会保留合法的元素,除去非法的元素.SET还去除了重复的元素,所以 SET 类型中不可能包含两个相同的元素。


mysql>create table test(
  enm enum('first','second','third'),
    s set('a','b','c','d')
);

mysql> insert into test values('first','a,b,c'),('second','a,c'), ('second','a,c'),('1','a,d,b'), ('0','b,c'),('third','d,c'),(null,null);
mysql> select * from test;
+--------+-------+
| enm    | s     |
+--------+-------+
| first  | a,b,c |
| second | a,c   |
| second | a,c   |
| first  | a,b,d |
|        | b,c   |
| third  | c,d   |
| NULL   | NULL  |
+--------+-------+
7 rows in set (0.00 sec)

mysql> insert into test values('five','a,b,c,d');
ERROR 1265 (01000): Data truncated for column 'enm' at row 1

mysql> insert into test values(3,'d,e,f');
ERROR 1265 (01000): Data truncated for column 's' at row 1

5.二进制数据(xxxBlob) 
XXXBLOB和xxxtext是对应的,不过存储方式不同,xxxTEXT是以文本方式存储的,如果存储英文的话区分大小写,而xxxBlob是以二进制方式存储的,不区分大小写。xxxBlob存储的数据只能整体读出。xxxTEXT可以指定字符集,xxxblob不用指定字符集。 


6.日期时间类型(date,time,datetime,timestamp) 
MySQL数据类型 含义
date 日期'2008-12-2'“1000-01-01”到“9999-12-31”  3字节
time 时间'12:25:36' “-838:59:59”到“838:59:59”     3字节
datetime 日期时间'2008-12-2 22:06:44'“1000-01-01 00:00:00” 到“9999-12-31 23:59:59”   8字节
timestamp  日期时间'20081202220644'     19700101000000 到20380119031407     4字节
year      年份2008     1901 到2155               1字节

2位形式的year  范围00-99     1-69转换为2001-2069   70-99转换为1970-1999

timestamp比较特殊,如果定义一个字段的类型为timestamp,这个字段的时间会在其他字段修改的时候自动刷新。所以这个数据类型的字段可以存放这条记录最后被修改的时间,而不是真正来的存放时间。 


7.数据类型的属性 
MySQL关键字 含义 
NULL                             数据列可包含NULL值
NOT NULL 数据列不允许包含NULL值 
DEFAULT xxx                默认值,如果插入记录的时候没有指定值,将取这个默认值
PRIMARY KEY             主键 
AUTO_INCREMENT   递增,如果插入记录的时候没有指定值,则在上一条记录的值上加1,仅适用于整数类型 
UNSIGNED 无符号 
CHARACTER SET name 指定一个字符集