比如我有个字段不会超过 64 个字符,那我数据库表创建的时候, 设置成
varchar(100)与 varchar(255)
有什么区别?
猜想:255 肯定不会比 100 内存占用量两倍。
之前 MySQL 中的字段长度都比较随意。
1
b821025551b 2020-04-17 11:44:10 +08:00
索引,引擎优化
|
2
est 2020-04-17 12:02:27 +08:00
varchar 不设置为主键不设置为索引应该不会占内存呀。(要占缓存
|
3
sadfQED2 2020-04-17 12:25:02 +08:00 via Android
不超过 64 个字符为啥不设置成 varchar64
|
4
GoLand 2020-04-17 12:28:51 +08:00
varchar 长度是可变的,虽然定义的时候指定 255,但是存一个 100 长度的占用空间就是 100 个长度所占用的空间。https://dev.mysql.com/doc/refman/5.7/en/char.html
|
5
wangyzj 2020-04-17 12:33:16 +08:00
小于 100 的字符串存储 varchar100 和 varchar255 应该是没区别
吧! |
6
Maboroshii 2020-04-17 12:35:53 +08:00 1
占用空间应该是相同的,不过 mysql 有个默认索引长度限制,varchar 太长了不能建索引
|
7
x97bgt 2020-04-17 13:20:21 +08:00 via iPhone
MYSQL 总的字段长度不能超过 65535 (好像是这个值)个字节。这在建表时会按可能的最大字符去计算,也就是 varchr 里的数字。
另外存储上,超过 255 的 varchar,字段名会占据 2 字节,小于 255 次占用 1 字节。所以总字段长度不限制的情况下,一般把 varchar 的长度设成 255 。 |
8
SjwNo1 2020-04-17 13:22:32 +08:00
不超过 64 个字符为啥不设置成 varchar64
+1 |
10
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 部分。 这是个很坑的特性。 |
12
Oktfolio 2020-04-17 22:59:47 +08:00
索引。
|
13
msg7086 2020-04-18 05:25:06 +08:00 via Android
总的行长有限制。
另外字符串长度还要考虑字符集,UTF8 存 64 字节字符串并不一定能存下 64 个字。 |
14
Aresxue 2020-04-18 13:47:31 +08:00
真实占用没区别,但是在索引创建方面有区别,也会影响总的行长,进而影响行的组织方式,可能会频繁引起页分裂啥的,所以能确定小于 64 就 varchar(64), 后续可能会有改动又不知道多大就直接 varchar(255),不然从小改到大锁表时间,还有上面说到的页分裂都有可能引发问题
|