计算记录列的大小



如果我有这样的表,那么除了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语句中使用您的函数。

最新更新