1.整型
1.处理符号问题时,默认是有符号,需要无符号时添加 UNSIGNED
CREATE TABLE `tbl` (`number` INT UNSIGNED);
2.INT(4),INT(11)与INT
INT(w),w表示的不是这个值的位数,仅仅代表显示的宽度,需要配合ZEROFILL使用,如
CREATE TABLE `t3` (`id` INT(3) ZEROFILL); INSERT INTO T3 VALUES(2); INSERT INTO T3 VALUES(2456);
查询时,如果实际位数大于宽度,则全部显示,否则补0
当使用ZEROFILL时,该属性变为UNSIGNED,如果插入负值,则实际插入了0.
3.其他整型
TINYINT 1字节
SMALLINT 2字节
MEDIAINT 3字节
INT 4字节
BIGINT 8字节
2.浮点型与定点型
1.浮点型有两种:FLOAT [(M,D)], DOUBLE [(M,D)]
M表示总位数,D表示小数点后的位数,当省略时,mysql按实际数值表示
2.定点型DECIMAL
当M,D被省略时,M=10,D=0
2.当插入的值小数点位数不足时补零,多余时舍入(可能是四舍五入)。
3.详细参照
https://www.cnblogs.com/gulibao/p/5416245.html
3.字符型
1.VARCHAR(N)
N的意义
在MySQL5之前,N表示字节数,MySQL5之后表示的是字符数,具体所占的字节数与编码有关。
对于GBK编码,一个汉字占3个字节,UTF-8编码,占2-3个字节,计算时按3个字节计算。
VARCHAR类型的最大长度
mysql将varchar数据保存在聚簇索引之外,且用1-2两个字节表示实际字符串长度,故其理论最大长度为65535字节,之所以是理论,是因为它还受行长度的限制。
来自行长度的限制
mysql5之后,行长度的最大字节数为65535,由于varchar的起始位和结束位还要占3个字节,故utf8编码的表,其最大字符数为65535/3-1=21844
当不止一个varchar属性时,最大长度又会发生变化。
2.CHAR(N)
N的意义
N依然表示字符数,具体占的字节数看编码,N最大255,当插入字符串长度超过N时,发生截取。
特点
CHAR类型的数据存储时会自动填充空格,检索时效率较高。
4.时间型
1.长度比较
TIMESTAMP 表示范围从1970年到2038年,占四个字节
DATETIME 占8个字节
DATE,TIME,YEAR均占3个字节。
2.TIMESTAMP的两个属性
如果定义时DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP子句都有,列值为默认使用当前的时间戳,并且自动更新。
如果不使用DEFAULT和ON UPDATE子句,那么它等同于DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP。
如果只有DEFAULT CURRENT_TIMESTAMP子句,而没有ON UPDATE子句,列值默认为当前时间戳但不自动更新。
如果只有ON UPDATE CURRENT_TIMESTAMP子句,列默认为0并自动更新
5.枚举型
ENUM('value1','value2') 按字符串形式表示,内部按整形存储,最多有65535个值