以下是我的一张表的统计数据的一部分。我不确定如何理解宽度列。这些值是以字节为单位吗?如果是这样,我知道fname
和lname
的ascii字符数高于5和6,并且mname
中有1个字符长值。
更新1。
以下是select * from statistics
的输出。我只显示了输出的前5列。
+--------+---------+------------------------+---------+-------+
| schema | table | column | type | width |
+========+=========+========================+=========+=======+
| abc | targets | fname | varchar | 5 |
| abc | targets | mname | varchar | 0 |
| abc | targets | lname | varchar | 6 |
答案 0 :(得分:0)
列width
显示原子数组的"字节宽度" (在gdk.h
中定义)。然而,这不是字符串列的整个故事,因为这里的原子数组只将偏移存储到字符串堆中。
MonetDB使用可变宽度列,因为如果几乎没有不同的字符串值,64位偏移将浪费内存。因此,在您的情况下,fname
列需要5个字节或40位的字符串偏移量,lname
需要6个字节(48位)。如果插入新值,则可能会更改。
mname
的零值很有意思,因为新列的宽度初始化为1。你使用的是哪个版本?