mysql字段定义长度实际存储长度

在MySQL数据库中,我们经常需要定义表的各种字段,如VARCHAR、INT等,而一个字段的长度是影响着这个字段的存储大小的。但是,实际上不同类型的字段长度定义和实际存储长度之间也存在差异。

例如,在MySQL中,VARCHAR类型的字段的实际长度是该字段中保存的字符数,再加上一个字节用于保存字符串的长度信息。也就是说,如果我们定义一个VARCHAR(10)的字段,那么在该字段中最多只能存储9个字符(因为需要一个字节保存长度信息),而存储在这个字段中的数据所占用的存储空间将根据实际存储的字符数来决定。

mysql> CREATE TABLE `demo` (
    `id` INT(11) NOT NULL,`name` VARCHAR(10) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

mysql> INSERT INTO `demo`(`id`,`name`) VALUES(1,'123456789');
Query OK,1 row affected (0.00 sec)

mysql> SHOW TABLE STATUS LIKE 'demo'\G
*************************** 1. row ***************************
           Name: demo
         Engine: InnoDB
        Version: 10
     Row_format: Dynamic
           Rows: 1
 Avg_row_length: 11
    Data_length: 16384
Max_data_length: 0
   Index_length: 0
      Data_free: 0
 Auto_increment: NULL
    Create_time: 2021-04-25 10:17:37
    Update_time: 2021-04-25 10:18:10
     Check_time: NULL
      Collation: utf8_general_ci
       Checksum: NULL
 Create_options: 
        Comment: 
1 row in set (0.01 sec) 

在上面的例子中,我们定义了一个VARCHAR(10)类型的name字段,然后向该表中插入了一行数据(id为1,name为“123456789”)。

通过执行SHOW TABLE STATUS命令,我们可以查看到这个表的各种信息,其中包括Data_length,表示这个表中存储数据的总大小。可以看到,这个表中只有1行数据,但实际上Data_length达到了16384字节,这是因为InnoDB引擎会预分配16KB大小的空间,用于存储这个表的数据。

我们使用LENGTH函数查看name字段中保存的字符串的长度:

mysql> SELECT LENGTH(name) FROM demo;
+-------------+
| LENGTH(name)|
+-------------+
|            9|
+-------------+
1 row in set (0.00 sec) 

可以看到,name字段实际保存了9个字符。同时,这个表中存储的数据总大小也是基于这个表中最大的行大小来计算的。因此,如果我们定义了一个非常长的VARCHAR字段,但只存储了很短的字符串,那么存储这条数据的大小将远远小于这个VARCHAR字段的定义长度。

总之,在MySQL数据库中,我们需要注意字段类型的定义和实际存储的大小之间的关系,以及存储空间的预分配等问题,以减少数据库存储的占用和提高性能。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


mysql中%不能表示什么
mysql中的column什么意思
mysql中asc什么意思
mysql中的where什么意思
mysql中如何求百分比
mysql中no是不是关键字
mysql中column可以省略吗
mysql中before是什么意思
mysql中主键约束和唯一约束是什么关系
mysql中的varchar是什么意思
在mysql中用来查询结果的函数是?
mysql中enum是什么意思
mysql中on是什么意思
mysql中主键约束和唯一约束怎么区分出来的
mysql中表更新数据的命令是哪个
mysql中or的用法
mysql中的unique如何实现唯一
mysql中and和or的区别
desc在mysql中什么意思
mysql中的unique是什么意思