Mysql字段

来源:互联网 发布:手机影视制作软件 编辑:程序博客网 时间:2024/05/17 19:21

数字类型

列类型

需要的存储量

范围、备注

TINYINT

1 个字节

一个很小的整数

有符号的范围是-128到127,无符号的范围是0到255

SMALLINT

2 个字节

一个比较小的整数

有符号的范围是-32768到32767,无符号的范围是0到65535

MEDIUMINT

3 个字节

一个中等大小的整数

有符号的范围是-8388608到8388607,无符号的范围是0到16777215

INT

4 个字节

一个正常大小整数

有符号的范围是-2147483648到2147483647,无符号的范围是0到4294967295

即最多可存储10个数字,如果存储手机号(11位)则会失败。

INTEGER

4 个字节

INT的一个同义词

BIGINT

8 个字节

一个大整数

有符号的范围是-9223372036854775808到9223372036854775807,无符号的范围是0到18446744073709551615

FLOAT(M,D)

4 个字节

 

一个小(单精密)浮点数字。不能无符号。

允许的值是-3.402823466E+38到-1.175494351E-38,0 和1.175494351E-38到3.402823466E+38。M是显示宽度而D是小数的位数。没有参数的FLOAT或有<24的一个 参数表示一个单精密浮点数字。

FLOAT

4 个字节

 

DOUBLE

 

8 个字节

一个正常大小(双精密)浮点数字。不能无符号。
允许的值是-1.7976931348623157E+308到-2.2250738585072014E-308、
0和2.2250738585072014E-308到1.7976931348623157E+308。

DOUBLE PRECISION

8 个字节

 

REAL

8 个字节

这些是DOUBLE同义词

DECIMAL(M,D)

M字节(D+2 , 如果M< D)

一个未压缩(unpack)的浮点数字。不能无符号。行为如同一个CHAR列:“未压缩”意味着数字作为一个字符串被存储,值的每一位使用一个字符

NUMERIC(M,D)

M字节(D+2 , 如果M< D)

这是DECIMAL的一个同义词


 在选择了某种数值类型时,应该考虑所要表示的值的范围,只需选择能覆盖要取值的范围的最小类型即可。选择较大类型会对空间造成浪费,使表不必要地增大,处理起来没有选择较小类型那样有效。对于整型值,如果数据取值范围较小,如人员年龄或兄弟姐妹数,则tinyint最合适。mediumint能够表示数百万的值并且可用于更多类型的值,但存储代价较大。bigint在全部整型中取值范围最大,而且需要的存储空间是表示范围次大的整型int类型的两倍,因此只在确实需要时才用。对于浮点值,double占用float的两倍空间。除非特别需要高精度或范围极大的值,一般应使用只用一半存储代价的float型来表示数据。  
    在定义整型列时,可以指定可选的显示尺寸m。如果这样,m应该是一个1 到255的整数。它表示用来显示列中值的字符数。例如,mediumint(4)指定了一个具有4个字符显示宽度的mediumint列。如果定义了一个没有明确宽度的整数列,将会自动分配给它一个缺省的宽度。缺省值为每种类型的“最长”值的长度。如果某个特定值的可打印表示需要不止m个字符,则显示完全的值;不会将值截断以适合m个字符。

那int(x)的x到底是什么,x为期望显示数据的列宽。

    期望列宽干什么用,这个是和mysql的另外的关键字zerofill一起使用

    zerofill 含义代表为未到达宽度x的前填充0【或称为0补位】,超出x代表宽度的数值按原样显示。

     备注:zerofill自动将int标示为无符号的类型

                  无该关键代表不填充,按原值显示。



日期和时间类型

列类型

需要的存储量

范围、备注

DATE

3 个字节

 1000-01-01~9999-12-313字节(MySQL3.23版以前是4字节 ) 0000-00-00

DATETIME

8 个字节

 1000-01-01 00:00:00~9999-12-3123:59:59 8字节 0000-00-00 00:00:00

TIMESTAMP

4 个字节

 19700101000000~2037年的某个时刻 4字节00000000000000

TIME

3 个字节

 -838:59:59~838:59:59 3字节00:00:00

YEAR

1 字节

 YEAR(4):1901~2155YEAR(2):1970~2069 1字节 0000

字符串类型

列类型

需要的存储量

备注

CHAR(M)

M字节,1 <= M<= 255

最大长度255 字节

VARCHAR(M)

L+1 字节, 在此L <=M1 <= M <=255

最大长度255 字节

TINYBLOB, TINYTEXT

L+1 字节,在此L< 2 ^ 8

最大长度为255(2^8-1)个字符

BLOB, TEXT

L+2 字节,在此L< 2 ^ 16

最大长度为65535=64K(2^16-1)个字符

MEDIUMBLOB,MEDIUMTEXT

L+3 字节,在此L< 2 ^ 24

最大长度为16777215=16M(2^24-1)个字符

LONGBLOB, LONGTEXT

L+4 字节,在此L< 2 ^ 32

最大长度为4294967295=4G(2^32-1)个字符

ENUM('value1','value2',...)

1 或 2 个字节, 取决于枚举值的数目(最大值65535)

 

SET('value1','value2',...)

1,2,3,4或8个字节, 取决于集合成员的数量(最多64个成员)

 


四种text对应四种blob

text与blob的区别在于:text不能存储图片。

                     blob是二进制流,text是非二进制

mysql 的二进制数据类型 BINARY, VARBINARY, BLOB 都没有字符集的概念

 

再存取blob数据时,要入库时base64,出库时再base64

-------------------------------------------------------------

1.

blob是二进制大对象,可以容纳可变量数量的数据,其中blob分为4中类型:TINYBLOB,BLOB,mediumblob和LongBlob,他们容纳的长度是不同的.

Text同样也分为四种类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT

2.

blob被视为二进制字符串,Text被视为非二进制字符串;

blob列没有字符集,并且排序和比较基于列值字节的数值值。

TEXT列有一个字符集,并且根据字符集的校对规则对值进行排序和比较。

在TEXT或BLOB列的存储或检索过程中,不存在大小写转换,当未运行在严格模式时,如果你为BLOB或TEXT列分配一个超过该列类型的最大长度的值值,值被截取以保证适合。如果截掉的字符不是空格,将会产生一条警告。使用严格SQL模式,会产生错误,并且值将被拒绝而不是截取并给出警告.在大多数方面,可以将BLOB列视为能够足够大的VARBINARY列。同样,可以将TEXT列视为VARCHAR列。

3.

BLOB和TEXT在以下几个方面不同于VARBINARY和VARCHAR.

BLOB和TEXT列不能有默认值.

当保存或检索BLOB和TEXT列的值时不删除尾部空格。(这与VARBINARY和VARCHAR列相同).

对于BLOB和TEXT列的索引,必须指定索引前缀的长度。对于CHAR和VARCHAR,前缀长度是可选的.

LONG和LONGVARCHAR对应MEDIUMTEXT数据类型。这是为了保证兼容性。如果TEXT列类型使用BINARY属性,将为列分配列字符集的二元校对规则. 

MySQL连接程序/ODBC将BLOB值定义为LONGVARBINARY,将TEXT值定义为LONGVARCHAR。由于BLOB和TEXT值可能会非常长,使用它们时可能遇到一些约束.

BLOB或TEXT对象的最大大小由其类型确定,但在客户端和服务器之间实际可以传递的最大值由可用内存数量和通信缓存区大小确定。你可以通过更改max_allowed_packet变量的值更改消息缓存区的大小,但必须同时修改服务器和客户端程序。例如,可以使用mysqlmysqldump来更改客户端的max_allowed_packet值.

------------------------------------------------------------------------------------

ZEROFILL属性(零值)适用于所有数值类数据列类型,作用是,如果数值的宽度小于定义的显示宽度,则在数值前填充0。
UNSIGNED属性不允许数据列出现负数。
AUTO_INCREMENT属性可生成独一无二的数字序列。只对整数类的数据列有效。
NULL和NOT NULL属性设置数据列是否可为空。
DEFAULT属性可为数据列指定默认值。


0 0