AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 227088
Accepted
dbdemon
dbdemon
Asked: 2019-01-15 05:47:54 +0800 CST2019-01-15 05:47:54 +0800 CST 2019-01-15 05:47:54 +0800 CST

varchar 列的长度 - 使用 255 有优势吗?[复制]

  • 772
这个问题在这里已经有了答案:
MySQL - varchar 长度和性能 2 个答案
3年前关闭。

我经常遇到这样的列varchar(255),所以大概这是一种约定。255 是 2^8 - 1。那么 2^n - 1 的长度有什么“神奇”吗?或者只是特别是255?varchar某些特定长度是否有性能或存储优化优势?还是这只是旧智慧不再适用于当前版本的 MariaDB 和 MySQL?

mysql mariadb
  • 4 4 个回答
  • 10718 Views

4 个回答

  • Voted
  1. Best Answer
    Rick James
    2019-01-15T09:09:27+08:002019-01-15T09:09:27+08:00

    我偶尔会抱怨255。当然, “255”曾经有一些原因,但许多不再有效,甚至适得其反。

    在 MySQL 中,有理由停止在 191、255、767、3071、64K 以及可能的其他值。有些依赖于 Engine,有些依赖于CHARACTER SET等。

    AVARCHAR存储为 1 或 2 字节长度加上足够的字节用于您指定的任何字符集中的当前文本。然而,选择 1 或 2并不仅仅由单个列驱动;它由总行大小驱动。也就是说,这不是使用 255 的有效借口。

    使用长度为

    • 大到足以保守地永远不会被超过,然而
    • 看起来合理的小。

    虽然我在咆哮...... CHAR(固定长度)很少被建议。几乎总是应该是CHARACTER SET ascii——country_code、postal_code、Y/N、M/F、MD5、UUID、base64 等(MD5 和 UUID 应该更进一步,但这是另一个咆哮。)

    盲目使用“255”的潜在负面影响:

    • 如果您有很多列,您可能会达到最大行大小限制并且CREATE TABLE会失败。
    • 您可能会超出索引大小的限制。
    • ComplexSELECTs可能需要一个临时表,并且可以使用MEMORY它。在这种情况下,VARCHAR(255)成为CHAR(255)临时表。而且,如果使用 utf8,则每行 755 个字节!(8.0 修复了这个设计缺陷?)

    相关:不要盲目使用BIGINT所有数字。它需要 8 个字节。EvenINT是多余的,只有 4 个字节。请参阅MEDIUMINT、SMALLINT和TINYINT。请注意,(2)onINT(2)没有任何意义;它仍然需要 4 个字节。

    • 8
  2. Mike
    2019-01-15T12:04:36+08:002019-01-15T12:04:36+08:00

    在某个时间点,这是 Sybase 和派生 SQL Server 中列的最大长度。我确信其他人复制它以保持兼容性,因此将应用程序/SQL 迁移到新平台并不困难,因为当时每个人都在为市场份额而战。

    除了兼容性之外,没有真正好的理由让它永久存在。我注意到这些天它似乎已被 varchar(max) 取代。

    • 5
  3. Hannah Vernon
    2019-01-15T09:09:11+08:002019-01-15T09:09:11+08:00

    “标准”列长度在所有地方都使用,并且总是表明没有进行任何努力来了解列的实际所需长度。

    如果您有一列使用的字符永远不会超过 24 个,为什么要将列的长度指定为 255?

    分析和使用可变长度列的正确长度需要少量工作,并确保使用过大列长度的副作用永远不会成为问题。我知道你的问题是关于 MySQL 的,但是这个答案显示了 SQL Server 如何以各种方式使用列长度,这些方式起初可能并不明显。

    • 2
  4. Joshua
    2019-01-15T14:57:17+08:002019-01-15T14:57:17+08:00

    我们现在采取了完全不同的规则。我们使用以下两种方法之一:

    `NVARCHAR(max)`
    

    如果它不会被索引。

    `NVARCHAR(400)`
    

    如果它会被索引。

    一般来说,我们认为限制已经过时,我们真的不应该再关心了。磁盘空间很便宜。400 确保始终可以在最严格的目标平台上创建索引。我的理解是 MySQL 上的 255 索引限制已经消失,否则我会写 255。关于VARCHAR你不会因为允许它比它需要的更大而受到惩罚,所以没有太大的缺点太大,所以我们只是把它设置大,不再考虑它。

    • -1

相关问题

  • 我在哪里可以找到mysql慢日志?

  • 如何优化大型数据库的 mysqldump?

  • 什么时候是使用 MariaDB 而不是 MySQL 的合适时机,为什么?

  • 组如何跟踪数据库架构更改?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve