mysql数据类型

来源:互联网 发布:php 整数转字符串 编辑:程序博客网 时间:2024/05/15 16:24

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");

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类型。


数值:

类型大小范围(有符号)范围(无符号)用途TINYINT1 字节(-128,127)(0,255)小整数值SMALLINT2 字节(-32 768,32 767)(0,65 535)大整数值MEDIUMINT3 字节(-8 388 608,8 388 607)(0,16 777 215)大整数值INT或INTEGER4 字节(-2 147 483 648,2 147 483 647)(0,4 294 967 295)大整数值BIGINT8 字节(-9 233 372 036 854 775 808,9 223 372 036 854 775 807)(0,18 446 744 073 709 551 615)极大整数值FLOAT4 字节(-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)单精度
浮点数值
DOUBLE8 字节(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的值小数值字符串:

类型大小用途CHAR0-255字节定长字符串VARCHAR数据+长度 最大65535变长字符串TINYBLOB0-255字节不超过 255 个字符的二进制字符串TINYTEXT0-255字节短文本字符串BLOB0-65 535字节二进制形式的长文本数据TEXT0-65 535字节长文本数据MEDIUMBLOB0-16 777 215字节二进制形式的中等长度文本数据MEDIUMTEXT0-16 777 215字节中等长度文本数据LOGNGBLOB0-4 294 967 295字节二进制形式的极大文本数据LONGTEXT0-4 294 967 295字节极大文本数据

日期和时间

类型大小
(字节)
范围格式用途DATE31000-01-01/9999-12-31YYYY-MM-DD日期值TIME3'-838:59:59'/'838:59:59'HH:MM:SS时间值或持续时间YEAR11901/2155YYYY年份值DATETIME81000-01-01 00:00:00/9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS混合日期和时间值TIMESTAMP41970-01-01 00:00:00/2037 年某时YYYYMMDD HHMMSS混合日期和时间值,时间戳
<完>

0 0
原创粉丝点击