MySQL 中 varchar(100)与 varchar(255)区别是什么?

2020-04-17 11:43:12 +08:00
 zealinux

比如我有个字段不会超过 64 个字符,那我数据库表创建的时候, 设置成

varchar(100)与 varchar(255)

有什么区别?

猜想:255 肯定不会比 100 内存占用量两倍。


之前 MySQL 中的字段长度都比较随意。

6196 次点击
所在节点    MySQL
14 条回复
b821025551b
2020-04-17 11:44:10 +08:00
索引,引擎优化
est
2020-04-17 12:02:27 +08:00
varchar 不设置为主键不设置为索引应该不会占内存呀。(要占缓存
sadfQED2
2020-04-17 12:25:02 +08:00
不超过 64 个字符为啥不设置成 varchar64
GoLand
2020-04-17 12:28:51 +08:00
varchar 长度是可变的,虽然定义的时候指定 255,但是存一个 100 长度的占用空间就是 100 个长度所占用的空间。https://dev.mysql.com/doc/refman/5.7/en/char.html
wangyzj
2020-04-17 12:33:16 +08:00
小于 100 的字符串存储 varchar100 和 varchar255 应该是没区别
吧!
Maboroshii
2020-04-17 12:35:53 +08:00
占用空间应该是相同的,不过 mysql 有个默认索引长度限制,varchar 太长了不能建索引
x97bgt
2020-04-17 13:20:21 +08:00
MYSQL 总的字段长度不能超过 65535 (好像是这个值)个字节。这在建表时会按可能的最大字符去计算,也就是 varchr 里的数字。
另外存储上,超过 255 的 varchar,字段名会占据 2 字节,小于 255 次占用 1 字节。所以总字段长度不限制的情况下,一般把 varchar 的长度设成 255 。
SjwNo1
2020-04-17 13:22:32 +08:00
不超过 64 个字符为啥不设置成 varchar64
+1
zealinux
2020-04-17 14:04:26 +08:00
@sadfQED2 @SjwNo1

还是那个问题,varchar64 与 varchar100 的区别是什么?
😄
xpresslink
2020-04-17 14:16:27 +08:00
varchar(100)与 varchar(255)主要区别:
( 1 )当存储的字符串长度小 100 时,两者占用的磁盘空间一样,但是消耗的内存不一样,更长的列消耗的内存会更多。因为 MySQL 通常会分配固定大小的内存块来保存内部值。尤其是使用临时表进行排序会操作时,会消耗更多的内存。在使用磁盘进行排序时,也是一样。

(2)按照 SQL 标准向数据库里面插入数据时候,
对长度大于 100 字符串,Varchar ( 100 )字自段就会丢弃大于 100 部分。
对长度大于 255 字符串,Varchar ( 255 )字自段就会丢弃大于 255 部分。
这是个很坑的特性。
SjwNo1
2020-04-17 14:53:01 +08:00
@zealinux
区别就是 预留的内存大小不一样,sql 存入长度超过你的预设会报错的
Oktfolio
2020-04-17 22:59:47 +08:00
索引。
msg7086
2020-04-18 05:25:06 +08:00
总的行长有限制。
另外字符串长度还要考虑字符集,UTF8 存 64 字节字符串并不一定能存下 64 个字。
Aresxue
2020-04-18 13:47:31 +08:00
真实占用没区别,但是在索引创建方面有区别,也会影响总的行长,进而影响行的组织方式,可能会频繁引起页分裂啥的,所以能确定小于 64 就 varchar(64), 后续可能会有改动又不知道多大就直接 varchar(255),不然从小改到大锁表时间,还有上面说到的页分裂都有可能引发问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/663374

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX