mysql中的varchar(100)声明使用多少实际存储空间?
技术问答
246 人阅读
|
0 人回复
|
2023-09-14
|
如果我有一个表,该表的字段声明为接受varchar(100),然后实际上插入单词“- [0 M+ {; Z# i7 s6 v
hello”,那么在mysql服务器上将使用多少实际存储空间?即使声明了varchar(100),插入NULL也会导致不使用任何存储吗?# K; P0 D& J; t
答案是什么,在不同的数据库实现中是否一致?: V; v! P% \: Y1 k; j
, N- a. H8 x6 L1 ^+ q2 n
解决方案:
: J6 N7 K5 L0 h0 E- Z8 v9 u& g B1 t# ?7 S. x/ O- b x; r6 I9 W
+ Z- p' l2 N7 g$ `$ n8 L& n P D- W3 `
* ?: i% t. d Y" b1 E! Y) W" p& G/ d) h如果我有一个表,该表的字段声明为接受varchar(100),然后我实际上插入单词“ hello”,那么在mysql服务器上将使用多少实际存储空间?8 @ E: n" P7 \& E% Y
# o; I) S0 Z4 p6 ]8 }/ q( N) O y
Mysql将存储5个字节,再加上1个字节作为长度。如果varchar大于255,则它将存储2个字节的长度。3 f, r5 q" J5 g' O( @8 V
请注意,这取决于列的字符集。如果字符集是utf8,则mysql每个字符最多需要3个字节。一些存储引擎(即内存)将始终要求字符集每个字符的最大字节长度。1 ~1 v( N: ~& E1 J/ O
" e9 I" _' V% z _1 z; X
即使声明了varchar(100),插入NULL也会导致不使用任何存储吗?
9 A6 y( E/ [- J7 f1 ?4 h0 i" B) }8 y, S" W. E
使列可为空意味着mysql将必须为每行最多8个可为空的列留出一个额外的字节。这称为“空掩码”。
9 F7 J. s+ f; g) K6 m8 N: Y1 @/ R
答案是什么,在不同的数据库实现中是否一致?
) w& ?+ z7 _% m2 C4 l4 }% o8 _3 p- s# R, [- A" W' y0 ]2 @
甚至在mysql内的存储引擎之间也不一致! |
|
|
|
|
|