gpt4 book ai didi

mysql - MySQL中将字符串存储为varchar的内存占用

转载 作者:可可西里 更新时间:2023-11-01 07:47:46 26 4
gpt4 key购买 nike

我开始对MySQL的内存使用很感兴趣。所以我在这里看这个:

http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html

我对节省内存的前景感到非常兴奋(例如)只需要一个带符号的 smallint,而我在许多地方使用的是 unsigned int。然后我阅读了有关 varchars 的内容...

“VARCHAR(M) - 如果列值需要 0 – 255 字节,则长度 + 1 字节”

什么?! 现在在我看来,好像存储单个 varchar 会耗尽大量内存,我什至可能不会对我的 int 与 smallint 感到兴奋,因为它被大大掩盖了通过 varchar 字段。所以我来这里问这是不是真的,因为它根本不可能? varchars 真的那么可怕吗?或者我真的不应该为我的 smallint 发现感到兴奋吗?

编辑:抱歉!我应该更清楚。因此,假设我存储了一个包含 7 个字符的 varchar,即 8 个字节。那么,这意味着它使用与存储在 BIGINT 列中的数字相同的数字吗?这就是我所关心的。

最佳答案

这就是说,对于给定的字符串长度,使用的存储量等于字符串的字节长度,加上一个字节来告诉 MySQL 字符串有多长。

例如,单词“automobile”有 10 个字节(每个字符 1 个字节),因此如果它存储在 varchar 列中,它将占用 11 个字节。 1 表示数字 10 ,1 表示字符串中的每个字符。

从您发布的链接: http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html

存储要求取决于以下因素:

-列值的实际长度

-列的最大可能长度

-列使用的字符集,因为有些字符集包含多字节字符

例如,VARCHAR(255) 列可以容纳最大长度为 255 个字符的字符串。假设该列使用latin1字符集(每个字符一个字节),实际需要存储的是字符串的长度(L),加上一个字节来记录字符串的长度。对于字符串 'abcd',L 为 4,存储要求为 5 个字节。如果同一列声明为使用 ucs2 双字节字符集,则存储要求为 10 个字节:'abcd' 的长度为八个字节,该列需要两个字节来存储长度,因为最大长度大于 255 (最多 510 个字节)。

关于mysql - MySQL中将字符串存储为varchar的内存占用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8637616/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com