为了获得最佳存储,应该在所有情况下都尽量使用最精确的类型。例如,如果整数列用于1到99999之间的值,则MEDIUMINT UNSIGNED是最佳类型。在表示所有必需值的类型中,此类型使用的存储量最少。
所有针对DECIMAL列的基本计算(+、-、*、和/)都以65位十进制(以10为基数)的精度完成。
如果精度不太重要,或者如果速度是最重要的,DOUBLE类型可能就足够了。为了获得高精度,可以转换为存储在BIGINT中的定点类型。这使您能够使用64位整数执行所有计算,然后根据需要将结果转换回浮点值。
使用来自其他数据库引擎的数据类型
为了方便使用其他供应商为SQL实现编写的代码,MySQL映射了如下表所示的数据类型。这些映射使得从其他数据库系统向MySQL导入表定义变得更加容易。
其他供应商类型 | MySQL类型 |
---|---|
BOOL | TINYINT |
BOOLEAN | TINYINT |
CHARACTER VARYING(M) | VARCHAR(M) |
FIXED | DECIMAL |
FLOAT4 | FLOAT |
FLOAT8 | DOUBLE |
INT1 | TINYINT |
INT2 | SMALLINT |
INT3 | MEDIUMINT |
INT4 | INT |
INT8 | BIGINT |
LONG VARBINARY | MEDIUMBLOB |
LONG VARCHAR | MEDIUMTEXT |
LONG | MEDIUMTEXT |
MIDDLEINT | MEDIUMINT |
NUMERIC | DECIMAL |
数据类型映射发生在表创建时,之后原始类型规范将被丢弃。如果使用其他供应商使用的类型创建一个表,然后发出DESCRIBE tbl_name语句,那么MySQL将使用等效的MySQL类型报告表结构。例如:
官方文档:
https://dev.mysql.com/doc/refman/8.0/en/choosing-types.html
https://dev.mysql.com/doc/refman/8.0/en/other-vendor-data-types.html