如果我有这样的表,那么除了PK 之外,为每列插入16位
CREATE TABLE x
(
id BIGINT AUTO_INCREMENT PRIMARY KEY,
col1 BIGINT,
col2 CHAR(16)
) Engine=InnoDB;
INSERT INTO x
VALUES (1234567890123456, '1234567890123456');
然后col1的大小将存储8字节,col2的大小将保存16字节。
我的理解正确吗?
MySQL数据库没有计算列大小的函数,但您可以通过编写自己的函数手动完成。现在我将告诉你如何做到这一点。首先,你可以通过这个查询获得列的数据类型:
select
c.COLUMN_NAME,
c.DATA_TYPE,
c.CHARACTER_MAXIMUM_LENGTH
from information_schema.`COLUMNS` c
where c.TABLE_SCHEMA = 'test' and c.TABLE_NAME = 'test_table';
您将获得数据
id bigint null
col1 bigint null
col2 char 31
col3 varchar 58
因此,您可以编写自己的函数,即function get_size_column(column_name varchar)
输入参数。在函数内部,必须控制列的数据类型,例如if datatype = bigint then size = 8
,int、smallint、bigint等数据类型是静态大小。If datatype = varchar or char
必须使用CHARACTER_MAXIMUM_LENGTH
字段。我写这篇文章是为了举例,但你必须为所有类型写if条件。我还必须说,有很多关于MySQL数据类型和存储大小的教程。完成所有这些过程后,您可以在查询的select语句中使用您的函数。