时间:2021-05-23
CHAR
char (M) M字符,长度是M*字符编码长度,M最大255。
验证如下:
mysql> create table t1(name char(256)) default charset=utf8;ERROR 1074 (42000): Column length too big for column 'name' (max = 255); use BLOB or TEXT insteadmysql> create table t1(name char(255)) default charset=utf8;Query OK, 0 rows affected (0.06 sec)mysql> insert into t1 values(repeat('整',255));Query OK, 1 row affected (0.00 sec)mysql> select length(name),char_length(name) from t1;+--------------+-------------------+| length(name) | char_length(name) |+--------------+-------------------+| 765 | 255 |+--------------+-------------------+1 row in set (0.00 sec)VARCHAR
VARCHAR(M),M同样是字符,长度是M*字符编码长度。它的限制比较特别,行的总长度不能超过65535字节。
注意,以上表的默认字符集是latin1,字符长度是1个字节,所以对于varchar,最大只能指定65532字节的长度。
如果是指定utf8,则最多只能指定21844的长度
注意:行的长度最大为65535,只是针对除blob,text以外的其它列。
确实,datetime占了5个字节。
TEXT,BLOB
mysql> create table t1(name text(255));Query OK, 0 rows affected (0.01 sec)mysql> create table t2(name text(256));Query OK, 0 rows affected (0.01 sec)mysql> show create table t1\G*************************** 1. row ***************************Table: t1Create Table: CREATE TABLE `t1` (`name` tinytext) ENGINE=InnoDB DEFAULT CHARSET=latin11 row in set (0.00 sec)mysql> show create table t2\G*************************** 1. row ***************************Table: t2Create Table: CREATE TABLE `t2` (`name` text) ENGINE=InnoDB DEFAULT CHARSET=latin11 row in set (0.00 sec)通过上面的输出可以看出text可以定义长度,如果范围小于28(即256)则为tinytext,如果范围小于216(即65536),则为text, 如果小于224,为mediumtext,小于232,为longtext。
上述范围均是字节数。
如果定义的是utf8字符集,对于text,实际上只能插入21845个字符
DECIMAl
关于Decimal,官方的说法有点绕,
还提供了一张对应表
对于以上这段话的解读,有以下几点:
1. 每9位需要4个字节,剩下的位数所需的空间如上所示。
2. 整数部分和小数部分是分开计算的。
譬如 Decimal(6,5),从定义可以看出,整数占1位,整数占5位,所以一共占用1+3=4个字节。
如何验证呢?可通过InnoDB Table Monitor
如何启动InnoDB Table Monitor,可参考:http://dev.mysql.com/doc/refman/5.7/en/innodb-enabling-monitors.html
结果会输出到错误日志中。
查看错误日志:
对于decimal(6,5),整数占1位,小数占5位,一共占用空间1+3=4个字节
对于decimal(9,0),整数部分9位,每9位需要4个字节,一共占用空间4个字节
对于decimal(8,3),整数占5位,小数占3位,一共占用空间3+2=5个字节。
至此,常用的MySQL数据类型验证完毕~
对于CHAR,VARCHAR和TEXT等字符类型,M指定的都是字符的个数。对于CHAR,最大的字符数是255。对于VARCHAR,最大的字符数与字符集有关,如果字符集是latin1,则最大的字符数是65532(毕竟每一个字符只占用一个字节),对于utf8,最大的字符数是21844,因为一个字符占用三个字节。本质上,VARCHAR更多的是受到行大小的限制(最大为65535个字节)。对于TEXT,不受行大小的限制,但受到自身定义的限制。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
前言在开发过程中,我们往往会用到decimal数据类型。因为decimal是MySQL中存在的精准数据类型。MySQL中的数据类型有:float,double等
MySQL数据类型中DECIMAL的用法实例详解在MySQL数据类型中,例如INT,FLOAT,DOUBLE,CHAR,DECIMAL等,它们都有各自的作用,下
我们知道,Java和MySQL中的数据类型是不同的,Java中除了基本数据类型,还有对象。有时候使用MySQL存储数据,或者从MySQL中读取数据时,会有一些特
介绍MySQL数据类型中的integertypes有点奇怪。你可能会见到诸如:int(3)、int(4)、int(8)之类的int数据类型。刚接触MySQL的时
MySQL数据(字段)类型在创建表的时候,要明确定义字段对应的数据类型。MySQL主要的数据类型分为数值类型、字符串(文本)类型、时间日期类型和其他类型几类。数