MYSQL常用字段属性
Posted 红桃xin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MYSQL常用字段属性相关的知识,希望对你有一定的参考价值。
1, DECIMAL(M,D)
M是总位数*[1-65],包含精度。D是小数位[0-30]*。当表示定点小数时使用类型,比float更精确,适合表示货币等精度 高的数字。比如 00.0001 to 99.9999 可用。
CREATE TABLE your_table
(
your_column DECIMAL(6,4) NOT NULL
);
M is the maximum number of digits (the precision). It has a range of 1 to 65. D is the number of digits to the right of the decimal point (the scale). It has a range of 0 to 30 and must be no larger than M .
2, INT
所有整数类型字段使用INT(TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT),根据所存放的数据大小选择合适的子类型,且所有INT类型都不使用长度限制,根据应用情况选择不同的整型。
如Value不包括负值,务必加 unsigned 属性(因为整型的存储空间是固定的,加unsigned属性后,符号位可以用来表示数值,可表示的最大值会相应得到扩充)。
范例:
- tinyint: -128<=取值<=127 ;tinyint unsigned 0 <= 取值 <= 255 。【枚举值的字段,建议适用tinyint类型,例如xxx_type,在检索时比字符型效率高】
- int:-2147483648 <= 取值 <= 2147483647;int unsigned: 0 <= 取值 <= 4294967295 。
- bigint: -9223372036854775808 <= 取值 <= 9223372036854775807;bigint unsigned:0 <= 取值 <= 18446744073709551615
InnoDB表必须主键为id int/bigint auto_increment,且主键值禁止被更新。
3,VARCHAR
所有可变长度的字符串类型字段均使用VARCHAR。字段长度超过5000时,建议和原表进行分拆,与原表主键组成新表存储。
容量限制:一张表所有列最大限制65,535 bytes 64K=64*1024
参考
4, CHAR
既定长度字符串一律使用char(M),如某些特定应用场景表示交易日(yyyymmdd),布尔类型可使用char(1),表示性别(“男”、“女”,“M”、“F”),表示是否(“是”,“否” / “Y”,“N”)。
5, TEXT
仅当需存储的字节数可能超过20000时,使用TEXT系列类型 (TEXT、MEDIUMTEXT、LONGTEXT)。并和原表进行分拆,与原表主键组成新表存储。因为所有MySQL数据库都会使用UTF8字符集,而VARCHAR最大只能存放64K数据。
- MEDIUMTEXT – up to 16 MB, 3 bytes overhead
- LONGTEXT – up to 4 GB, 4 bytes overhead
- TINYTEXT – up to 255 bytes, 1 byte overhead
- TEXT – up to 64 KB, 2 bytes overhead
【强制】 不推荐使用blob,text等类型。它们都比较浪费硬盘和内存空间。在加载表数据时,会读取大字段到内存里从而浪费内存空间,影响系统性能。建议和PM、RD沟通,是否真的需要这么大字段,解释业务的必要性,否则不允许存在。Innodb中当一行记录超过8098字节时,会将该记录中选取最长的一个字段将其768字节放在原始page里,该字段余下内容放在overflow-page里。不幸的是在compact行格式下,原始page和overflow-page都会加载。该种格式建议存储在mongodb
6, DATA
- DATA: 精确到日期,精确到天的当前日期有函数 CURDATE() 命名xxx_date
- DATETIME: 精确到时间(时、分、秒)。内置函数 NOW() 函数命名xxx_time
TIP: 严禁使用TIMESTAMP类型。由于存储范围为:‘1970-01-01 00:00:01’ UTC ~ ‘2038-01-19 03:14:07’ UTC。
以上是关于MYSQL常用字段属性的主要内容,如果未能解决你的问题,请参考以下文章