1.整数类型
可以设置无符号,如下制定为1个字节长度,无符号,也可以用signed,只不过默认就是,不需要显示写出同unsigned char
create table tbl_int( data tinyint unsigned );
2.字符的最小宽度(若不指定默认都是1)
这个只影响显示的宽度,不会影响其在数据库中存储的大小。在创建数据的时候可以指定数据的显示宽度,注意这个跟数据的大小没有关系,只是在显示时填充的空格位置。当指定填充数据为0的时候显示比较明显。
alter table tbl_int modify data tinyint(2) unsigned zerofill;
当存储数据1的时候,取出数据是01 因为是指定了最小宽度2,填充0
当存储数据125时, 取出的数据时125,超过2的时候不会被截断。
*注意;当使用zerofill时,数据类型会默认变为unsigned,不能设置为signed。
3.浮点数的有效位
float 默认精度只有7位左右,如果存入1234567890 经过四舍五入存到数据库后,是12345670000
double 默认精度位17位左右。
可以指定数值范围,Type(M,D) M表示显示的总数(maximum),D表示总数中小数的位数(decimal)。注意数值范围的M和整型的显示宽度是完全不同的。
4.科学计数法
insert into num values(0.2E3);
5.定点数
前面说过float和double是浮点数,其存入是要进行四舍五入的。但是decimal是不会发生这种情况。
6.字符类型
char 必须指定范围0-255,定长,存经常发生变长数据时浪费空间。
varchar变长,不同的字符集允许的总长度不同,mysql5.1中最长255,以后版本中最大长度(注意不是字符数)可以是65535(数据+长度).由于要获取大小,再取数据,效率先对于char会低。
char varchar类型可以使用 BINARY 修饰符。当用于比较运算时,这个修饰符使 CHAR 以二进制方式参于运算,而不是以传统的区分大小写的方式。
char(3) 这个3表示的字符数,即可以保存3个汉字或者3个英文字母。但是char可以保存的最大长度255是指的是字节数。
*MySQL要求一个行的定义长度不能超过65535,如果表中有允许为null的字段,则mysql用一个字节来记录整个记录中哪个字段为null,所以必须所有字段都为not null,才不需要这个字节,否则一行的长度最大为65534
create table test1 ( col_name varchar(65533) not null ) character set latin1; //not null的最长可以是65533,2个字节记录长度
create table test2 ( col_name varchar(65532) ) character set latin1;//需要一个字节表示是否为NULL,最长为65532
create table tbl(col1 varchar(65528), col2 int) character set latin1; //int占4个字节,一行最大65535-int四个字节-1个字节存储null-2个字节存储长度,varchar最大长度为65527.
7.新版本中的TEXT
通常用户自由输入的部分都会设计为TEXT类型,比如博客内容,留言内容等。
新版本中的TEXT其实和varchar的长度限制一样,但是TEXT不需要显示声明长度,另外TEXT的内容长度为65535,用于计算长度的字符是另外算的。而varchar的长度是包含再65535内的。
8.ENUM 移植性的关系,用的较少。
比如单选题,可以用这个。
create table t1(col1 enum("femail", "male”));
//enum括号中需要列举出所有的选项,在实际保存时,mysql保存的时整数。下面2个插入语句时等效的。
枚举的保存时用2个字节,所以最多可以有65535个枚举项目。
insert into t2 values("2");
9.set 移植性的关系,用的较少。
10.时间日期
时间日期存储的是字符串,存储时必须按照下面表格的格式存储,比如datetime
insert into datetime values("1992-10-3 10:3:3”);
类型可以支持任意分隔符,下面的时间插入是等效的。但为了防止错误,尽量写成YYYY-MM-DD HH:MM:SS形式。
insert into datetime values("1992103100303”);
insert into datetime values("1992-10-3-10-3-3”);
insert into datetime values("1992:10:3:10:3:3”);
timestamp的操作同date time一样,只是timestamp存储的是整形,所以会比较省空间。确定只能存1970-2037间数据。
一般的记录发表日期等,用timestamp比价好,够用,省空间。
另外,timestamp是不可以为NULL的,不写则默认插入当前时间点,datetime可以为NULL。
*time类型不仅可以表示时间,还可以用来计时,范围 -838:59:59'/'838:59:59
*PHP项目中,通常用整数的时间戳,这个时间戳是php函数生成的int,Unix时间戳。而不用timestamp类型。
字符串:
<完>
可以设置无符号,如下制定为1个字节长度,无符号,也可以用signed,只不过默认就是,不需要显示写出同unsigned char
create table tbl_int( data tinyint unsigned );
2.字符的最小宽度(若不指定默认都是1)
这个只影响显示的宽度,不会影响其在数据库中存储的大小。在创建数据的时候可以指定数据的显示宽度,注意这个跟数据的大小没有关系,只是在显示时填充的空格位置。当指定填充数据为0的时候显示比较明显。
alter table tbl_int modify data tinyint(2) unsigned zerofill;
当存储数据1的时候,取出数据是01 因为是指定了最小宽度2,填充0
当存储数据125时, 取出的数据时125,超过2的时候不会被截断。
*注意;当使用zerofill时,数据类型会默认变为unsigned,不能设置为signed。
3.浮点数的有效位
float 默认精度只有7位左右,如果存入1234567890 经过四舍五入存到数据库后,是12345670000
double 默认精度位17位左右。
可以指定数值范围,Type(M,D) M表示显示的总数(maximum),D表示总数中小数的位数(decimal)。注意数值范围的M和整型的显示宽度是完全不同的。
4.科学计数法
insert into num values(0.2E3);
5.定点数
前面说过float和double是浮点数,其存入是要进行四舍五入的。但是decimal是不会发生这种情况。
6.字符类型
char 必须指定范围0-255,定长,存经常发生变长数据时浪费空间。
varchar变长,不同的字符集允许的总长度不同,mysql5.1中最长255,以后版本中最大长度(注意不是字符数)可以是65535(数据+长度).由于要获取大小,再取数据,效率先对于char会低。
char varchar类型可以使用 BINARY 修饰符。当用于比较运算时,这个修饰符使 CHAR 以二进制方式参于运算,而不是以传统的区分大小写的方式。
char(3) 这个3表示的字符数,即可以保存3个汉字或者3个英文字母。但是char可以保存的最大长度255是指的是字节数。
*MySQL要求一个行的定义长度不能超过65535,如果表中有允许为null的字段,则mysql用一个字节来记录整个记录中哪个字段为null,所以必须所有字段都为not null,才不需要这个字节,否则一行的长度最大为65534
create table test1 ( col_name varchar(65533) not null ) character set latin1; //not null的最长可以是65533,2个字节记录长度
create table test2 ( col_name varchar(65532) ) character set latin1;//需要一个字节表示是否为NULL,最长为65532
create table tbl(col1 varchar(65528), col2 int) character set latin1; //int占4个字节,一行最大65535-int四个字节-1个字节存储null-2个字节存储长度,varchar最大长度为65527.
7.新版本中的TEXT
通常用户自由输入的部分都会设计为TEXT类型,比如博客内容,留言内容等。
新版本中的TEXT其实和varchar的长度限制一样,但是TEXT不需要显示声明长度,另外TEXT的内容长度为65535,用于计算长度的字符是另外算的。而varchar的长度是包含再65535内的。
8.ENUM 移植性的关系,用的较少。
比如单选题,可以用这个。
create table t1(col1 enum("femail", "male”));
//enum括号中需要列举出所有的选项,在实际保存时,mysql保存的时整数。下面2个插入语句时等效的。
枚举的保存时用2个字节,所以最多可以有65535个枚举项目。
insert into t2 values("2");
insert into t2 values(“male);
用下面的语句 字段名+0 可以查看mysql实际保存的内容。
select col1+0 from t1;
9.set 移植性的关系,用的较少。
集合,比如多选题的答案可以用set来设计。集合最多可占8个字节,有64个bit,每个bit表示选择非选择,最多可有64个选项。
create table t2(col1 set(“A”, “B”, “C”, “D”));
insert into t3 values("A,B"); //注意 A,B之间不能有空格
同枚举一样,用下面的语句 字段名+0 可以查看mysql实际保存的内容。
select col1+0 from t2;
10.时间日期
时间日期存储的是字符串,存储时必须按照下面表格的格式存储,比如datetime
insert into datetime values("1992-10-3 10:3:3”);
类型可以支持任意分隔符,下面的时间插入是等效的。但为了防止错误,尽量写成YYYY-MM-DD HH:MM:SS形式。
insert into datetime values("1992103100303”);
insert into datetime values("1992-10-3-10-3-3”);
insert into datetime values("1992:10:3:10:3:3”);
timestamp的操作同date time一样,只是timestamp存储的是整形,所以会比较省空间。确定只能存1970-2037间数据。
一般的记录发表日期等,用timestamp比价好,够用,省空间。
另外,timestamp是不可以为NULL的,不写则默认插入当前时间点,datetime可以为NULL。
*time类型不仅可以表示时间,还可以用来计时,范围 -838:59:59'/'838:59:59
*PHP项目中,通常用整数的时间戳,这个时间戳是php函数生成的int,Unix时间戳。而不用timestamp类型。
数值:
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
TINYINT | 1 字节 | (-128,127) | (0,255) | 小整数值 |
SMALLINT | 2 字节 | (-32 768,32 767) | (0,65 535) | 大整数值 |
MEDIUMINT | 3 字节 | (-8 388 608,8 388 607) | (0,16 777 215) | 大整数值 |
INT或INTEGER | 4 字节 | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 |
BIGINT | 8 字节 | (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 极大整数值 |
FLOAT | 4 字节 | (-3.402 823 466 E+38,1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 单精度 浮点数值 |
DOUBLE | 8 字节 | (1.797 693 134 862 315 7 E+308,2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 双精度 浮点数值 |
DECIMAL | 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 | 依赖于M和D的值 | 依赖于M和D的值 | 小数值 |
类型 | 大小 | 用途 |
CHAR | 0-255字节 | 定长字符串 |
VARCHAR | 数据+长度 最大65535 | 变长字符串 |
TINYBLOB | 0-255字节 | 不超过 255 个字符的二进制字符串 |
TINYTEXT | 0-255字节 | 短文本字符串 |
BLOB | 0-65 535字节 | 二进制形式的长文本数据 |
TEXT | 0-65 535字节 | 长文本数据 |
MEDIUMBLOB | 0-16 777 215字节 | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16 777 215字节 | 中等长度文本数据 |
LOGNGBLOB | 0-4 294 967 295字节 | 二进制形式的极大文本数据 |
LONGTEXT | 0-4 294 967 295字节 | 极大文本数据 |
日期和时间
类型 | 大小 (字节) | 范围 | 格式 | 用途 |
DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 | '-838:59:59'/'838:59:59' | HH:MM:SS | 时间值或持续时间 |
YEAR | 1 | 1901/2155 | YYYY | 年份值 |
DATETIME | 8 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
TIMESTAMP | 4 | 1970-01-01 00:00:00/2037 年某时 | YYYYMMDD HHMMSS | 混合日期和时间值,时间戳 |
<完>