varchar设定长度后,如果超出设定值则被截断 (2008-12-2) varchar最大 21843 char最大 255 datetime (2008-11-6 时间字段的区别 andy注) 不能自动生成当前时间, MySQL的默认值不允许设为函数, SQL server用now, Oracle用sysdate 格式 'YYYY-MM-DD HH:MM:SS' 范围 '1000-01-01 00:00:00' - '9999-12-31 23:59:59' date 格式 'YYYY-MM-DD' 没有时间部分,只有日期 范围 '1000-01-01' - '9999-12-31' timestamp 可以自动添加默认值为系统当前时间 在一个表里只能设一个timestamp列, 范围 1970-2037 一个字节=8个2进制位 一个中文2个字节 一个英文为1个字节 2 ^ 4 = 16 2 ^ 7 = 128 2^ 8 = 256 2^ 15 = 32768 2^ 16 = 65536 2^ 23 = 8388608 2^ 24 = 16777216 2^ 31 = 2147483648 2^ 32 = 4294967296 2^ 63 = 9223372036854775808 2^ 64 = 18446744073709551616 亿:代表的是10的八次方。 兆:代表的是10的十二次方。 京:代表的是10的十六次方。 垓:代表的是10的二十次方。 属性attributes: unsigned:无符号 unsigned zerofill:无符号左边补0 这里对我最有用。我特别指出。 on update current_timestamp:插入当前时间 宽度指示器 MySQL 以一个可选的显示宽度指示器的形式对 SQL 标准进行扩展,这样当从数据库检索一个值时,可以把这个值加长到指定的长度。 例如,指定一个字段的类型为 INT(6),就可以保证所包含数字少于 6 个的值从数据库中检索出来时能够自动地用空格填充。 需要注意的是, 使用一个宽度指示器不会影响字段的大小和它可以存储的值的范围。 万一我们需要对一个字段存储一个超出许可范围的数字,MySQL 会根据允许范围最接近它的一端截短后再进行存储。 还有一个比较特别的地方是,MySQL 会在不合规定的值插入表前自动修改为 0。 UNSIGNED 修饰符规定字段只保存正值。因为不需要保存数字的正、负符号,可以在储时节约一个“位”的空间。 从而增大这个字段可以存储的值的范围。 ZEROFILL 修饰符规定 0(不是空格)可以用来真补输出的值。使用这个修饰符可以阻止 MySQL 数据库存储负值。 在BLOB和TEXT类型之间的唯一差别是对BLOB值的排序和比较以大小写敏感方式执行, 而对TEXT值是大小写不敏感的。换句话说,一个TEXT是一个大小写不敏感的BLOB。 设置tinyint,smallint,mediumint,int时后面位数不用指定,自动填上 ·tinyint[(m)] [unsigned] [zerofill]--4位, 1字节, 2^ 8,100-200 很小的整数。带符号的范围是-128到127。无符号的范围是0到255。 ·bool,boolean 是tinyint(1)的同义词。zero值被视为假。非zero值视为真。 在将来,将根据标准sql引入完全布尔类型的处理。 ·smallint[(m)] [unsigned] [zerofill]--5位, 2字节, 2^ 16,3-6万 小的整数。带符号的范围是-32768到32767。无符号的范围是0到65535。 ·mediumint[(m)] [unsigned] [zerofill]--9位, 3字节, 2^ 24,800-1000万 中等大小的整数。带符号的范围是-8388608到8388607。无符号的范围是0到16777215。 ·int[(m)] [unsigned] [zerofill]--11位, 4字节, 2^ 32,20-40亿 普通大小的整数。带符号的范围是-2147483648到2147483647。无符号的范围是0到4294967295。 ·integer[(m)] [unsigned] [zerofill] 这是int的同义词。 ·bigint[(m)] [unsigned] [zerofill]--20位, 8字节, 2^ 64,900-1000京 大整数。带符号的范围是-9223372036854775808到9223372036854775807。无符号的范围是0到18446744073709551615 ·FLOAT[(M,D)] [UNSIGNED] [ZEROFILL] 小(单精度)浮点数。允许的值是-3.402823466E+38到-1.175494351E-38、0和1.175494351E-38到3.402823466E+38。 这些是理论限制,基于IEEE标准。实际的范围根据硬件或操作系统的不同可能稍微小些。 M是小数纵位数,D是小数点后面的位数。如果M和D被省略,根据硬件允许的限制来保存值。单精度浮点数精确到大约7位小数位。 如果指定UNSIGNED,不允许负值。 使用浮点数可能会遇到意想不到的问题,因为在MySQL中的所有计算用双精度完成。 ·DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL] 普通大小(双精度)浮点数。允许的值是-1.7976931348623157E+308到-2.2250738585072014E-308、0和 2.2250738585072014E-308到 1.7976931348623157E+308。 这些是理论限制,基于IEEE标准。实际的范围根据硬件或操作系统的不同可能稍微小些。 M是小数总位数,D是小数点后面的位数。如果M和D被省略,根据硬件允许的限制来保存值。双精度浮点数精确到大约15位小数位。 如果指定UNSIGNED,不允许负值。 ·DOUBLE PRECISION[(M,D)] [UNSIGNED] [ZEROFILL], REAL[(M,D)] [UNSIGNED] [ZEROFILL] 为DOUBLE的同义词。除了:如果SQL服务器模式包括REAL_AS_FLOAT选项,REAL是FLOAT的同义词而不是DOUBLE的同义词。 ·FLOAT(p) [UNSIGNED] [ZEROFILL] 浮点数。p表示精度(以位数表示),但MySQL只使用该值来确定是否结果列的数据类型为FLOAT或DOUBLE。如果p为从0到24, 数据类型变为没有M或D值的FLOAT。如果p为从25到53,数据类型变为没有M或D值的DOUBLE。 结果列范围与本节前面描述的单精度FLOAT或双精度 DOUBLE数据类型相同。 FLOAT(p)语法与ODBC兼容。 ·DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL] 压缩的“严格”定点数。M是小数位数(精度)的总数,D是小数点(标度)后面的位数。小数点和(负数)的‘-’符号不包括在M中。 如果D是0,则值没有小数点或分数部分。DECIMAL整数最大位数(M)为65。支持的十进制数的最大位数(D)是30。 如果D被省略, 默认是0。如果M被省略,默认是10。 如果指定UNSIGNED,不允许负值。 所有DECIMAL列的基本计算(+,-,*,/)用65位精度完成。 ·DEC[(M[,D])] [UNSIGNED] [ZEROFILL], NUMERIC[(M[,D])] [UNSIGNED] [ZEROFILL], FIXED[(M[,D])] [UNSIGNED] [ZEROFILL] 是DECIMAL的同义词。FIXED同义词适用于与其它服务器的兼容性。 ·DATE 日期。支持的范围为'1000-01-01'到'9999-12-31'。MySQL以'YYYY-MM-DD'格式显示DATE值,但允许使用字符串或数字为DATE列分配值。 ·DATETIME 日期和时间的组合。支持的范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。 MySQL以'YYYY-MM-DD HH:MM:SS'格式显示DATETIME值,但允许使用字符串或数字为DATETIME列分配值。 ·TIMESTAMP[(M)] 时间戳。范围是'1970-01-01 00:00:00'到2037年。 TIMESTAMP列用于INSERT或UPDATE操作时记录日期和时间。如果你不分配一个值, 表中的第一个TIMESTAMP列自动设置为最近操作的日期和时间。也可以通过分配一个NULL值,将TIMESTAMP列设置为当前的日期和时间。 TIMESTAMP值返回后显示为'YYYY-MM-DD HH:MM:SS'格式的字符串,显示宽度固定为19个字符。如果想要获得数字值,应在TIMESTAMP 列添加+0。 ·[NATIONAL] CHAR(M) [BINARY| ASCII | UNICODE]--255字符 固定长度字符串,当保存时在右侧填充空格以达到指定的长度。M表示列长度。M的范围是0到255个字符。 ·[NATIONAL] VARCHAR(M) [BINARY]--65,535 6万 变长字符串。M 表示最大列长度。M的范围是0到65,535。(VARCHAR的最大实际长度由最长的行的大小和使用的字符集确定。最大有效长度是65,532字节)。 ·BINARY(M) BINARY类型类似于CHAR类型,但保存二进制字节字符串而不是非二进制字符串。 ·VARBINARY(M) VARBINARY类型类似于VARCHAR类型,但保存二进制字节字符串而不是非二进制字符串。 4.1以下的版本, 最大长度限制为255,其数据范围可以是0~255或1~255(根据不同版本数据库来定)。 MySQL5.0以上的版本,varchar数据类型的长度支持到了65535,可以存放65532个字节的数据,起始位和结束位占去了3个字节 在4.1或以下版本中需要使用固定的TEXT或BLOB格式存放的数据可以使用可变长的varchar来存放,能有效的减少数据库文件的大小 65532/3 = 21844 (utf-8编码存储 一个字为3个字节) 最大可设为 varchar(21843) ·TINYBLOB--255 最大长度为255(28–1)字节的BLOB列。 ·TINYTEXT--255 最大长度为255(28–1)字符的TEXT列。 ·BLOB[(M)]--65,535 6万 最大长度为65,535(216–1)字节的BLOB列。 可以给出该类型的可选长度M。如果给出,则MySQL将列创建为最小的但足以容纳M字节长的值的BLOB类型。 ·TEXT[(M)]--65,535 6万 最大长度为65,535(216–1)字符的TEXT列。 可以给出可选长度M。则MySQL将列创建为最小的但足以容纳M字符长的值的TEXT类型。 ·MEDIUMBLOB--16,777,215 1亿 最大长度为16,777,215(224–1)字节的BLOB列。 ·MEDIUMTEXT--16,777,215 1亿 最大长度为16,777,215(224–1)字符的TEXT列。 ·LONGBLOB--4,294,967,295 40亿 最大长度为4,294,967,295或4GB(232–1)字节的BLOB列。 LONGBLOB列的最大有效(允许的)长度取决于客户端/服务器协议中配置最大包大小和可用的内存。 ·LONGTEXT--4,294,967,295 40亿 最大长度为4,294,967,295或4GB(232–1)字符的TEXT列。 LONGTEXT列的最大有效(允许的)长度取决于客户端/服务器协议中配置最大包大小和可用的内存。 ·ENUM('value1','value2',...) 枚举类型。只能有一个值的字符串,从值列'value1','value2',...,NULL中或特殊 ''错误值中选出。 ENUM列最多可以有65,535个截然不同的值。ENUM值在内部用整数表示。 ·SET('value1','value2',...) 一个设置。字符串对象可以有零个或多个值,每个值必须来自列值'value1','value2',...SET列最多可以有64个成员。SET值在内部用整数表示。 列类型 需要的存储量 TINYINT 1 字节 SMALLINT 2 个字节 MEDIUMINT 3 个字节 INT 4 个字节 INTEGER 4 个字节 BIGINT 8 个字节 FLOAT(X) 4 如果 X < = 24 或 8 如果 25 < = X < = 53 FLOAT 4 个字节 DOUBLE 8 个字节 DOUBLE PRECISION 8 个字节 REAL 8 个字节 DECIMAL(M,D) M字节(D+2 , 如果M < D) NUMERIC(M,D) M字节(D+2 , 如果M < D) 日期和时间类型 列类型 需要的存储量 DATE 3 个字节 DATETIME 8 个字节 TIMESTAMP 4 个字节 TIME 3 个字节 YEAR 1 字节 串类型 列类型 需要的存储量 CHAR(M) M字节,1 <= M <= 255 VARCHAR(M) L+1 字节, 在此L <= M和1 <= M <= 255 TINYBLOB, TINYTEXT L+1 字节, 在此L< 2 ^ 8 BLOB, TEXT L+2 字节, 在此L< 2 ^ 16 MEDIUMBLOB, MEDIUMTEXT L+3 字节, 在此L< 2 ^ 24 LONGBLOB, LONGTEXT L+4 字节, 在此L< 2 ^ 32 ENUM('value1','value2',...) 1 或 2 个字节, 取决于枚举值的数目(最大值65535) SET('value1','value2',...) 1,2,3,4或8个字节, 取决于集合成员的数量(最多64个成员)
|