【问题标题】:Memory allocation in MySQL datatypes?MySQL数据类型中的内存分配?
【发布时间】:2016-04-03 03:59:43
【问题描述】:

我是 MySQL 新手。我对数据类型的内存分配有点困惑。如果我将类型初始化为 bigint,它将占用 8 个字节的内存。如果我初始化 bigint(10) 那么它会占用 80 个字节还是相同的 8 个字节但有限制。在数据类型上初始化 10 有什么用?而且我也对 varchar 有点困惑。 varchar(10) 和 varchar(100) 的内存大小是多少?它的内存大小会有所不同吗?我正在使用 InnoDB 引擎。

【问题讨论】:

  • @Ryan 你的意思是 bigint(10) 和 bigint(100) 分配相同大小的内存。没有区别,不是吗?
  • 正确:bigint始终在数据库中使用 8 个字节。 (10) 表示显示时的默认宽度为 10 个字符。我之前提供的链接解释了如何计算不同数据类型将占用多少空间。

标签: mysql sql memory sqldatatypes


【解决方案1】:

数字数据类型在不是NULL 时占用固定数量的空间。

VARCHAR(n) 占用 1 或 2 个字节的长度,再加上可以容纳任意多个字符的空间——最多 n。注意:我说的是“字符”,而不是“字节”。对于asciilatin1,一个字符占用一个字节。但是对于utf8,一个字符占用最多 3 个字节。

VARCHAR(10) CHARACTER SET utf8 将占用 1 个字节(对于空字符串)到 32 个字节。
VARCHAR(100) CHARACTER SET utf8 将占用 2 个字节到 302 个字节。
VARCHAR(255) CHARACTER SET utf8 将占用 2 个字节到 767 个字节.

CHAR(10) CHARACTER SET utf8 总是占用 30 个字节。因此,VARCHAR 通常是比CHAR 更好的选择。

NULL 是特殊情况,几乎不占用空间。相关评论:我应该使用... NOT NULL 并使用'' 吗?或使用NULLs?空间差异不如语义重要。在适合您的应用时使用NULL

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-08
    • 1970-01-01
    • 2013-09-29
    • 2023-04-02
    相关资源
    最近更新 更多