21.1.2列的物理属性

接下来,我将在一行中描述每列的物理属性。格式完全取决于数据类型和列的大小,因此,对于每个数据类型,我将给出描述和一个例子。

所有类型都在包含/ mysql_com.h文件中定义enum_field_types.枚举结构。以下是关键值和相应数字的示例:

MYSQL_TYPE_BIT 16 MYSQL_TYPE_BLOB 252 MYSQL_TYPE_DATE 10 MYSQL_TYPE_DATETIME 12 MYSQL_TYPE_DECIMAL 0 MYSQL_TYPE_DOUBLE 5 MYSQL_TYPE_ENUM 247 MYSQL_TYPE_FLOAT 4 MYSQL_TYPE_GEOMETRY 255 MYSQL_TYPE_INT24 9 MYSQL_TYPE_LONG 3 MYSQL_TYPE_LONGLONG 8 MYSQL_TYPE_LONG_BLOB 251 MYSQL_TYPE_MEDIUM_BLOB 250 MYSQL_TYPE_NEWDATE 14 MYSQL_TYPE_NEWDECIMAL 246 MYSQL_TYPE_NULL 6 MYSQL_TYPE_SET 248 MYSQL_TYPE_SHORT 2 MYSQL_TYPE_STRING 254 MYSQL_TYPE_TIME 11 MYSQL_TYPE_TIMESTAMP 7 MYSQL_TYPE_TINY 1个MYSQL_TYPE_TINY_BLOB 249 MYSQL_TYPE_VARCHAR 15mysql_type_var_string 253 mysql_type_year 13
  • 字符数据类型

char

    • 存储:固定长度串,右侧具有空间填充。

    • 示例:AChar(5)包含值的列'一种'好像:十六进制41 20 20 20 20- (长度= a ??'

    varchar.

    • 存储:具有前一个长度的可变长度字符串。

    • 示例:A瓦尔(7)列包含'一种'好像:十六进制01 41.- (长度= a'

    • 在MySQL 4.1中长度始终为1字节。在MySQL 5.0中,长度可以是1字节(最多255)或2个字节(256到65535)。关于新格式的一些进一步的随机记录:在旧表中(来自MySQL 4.1及更早版本),varchar.列有类型mysql_type_var_string.,它与a完全一样char除了你做的话改变表,它转换为真实varchar.mysql_type_varchar.)。(这意味着旧表将与用户一起使用。)...与上述情况相比,不再有任何自动变化charvarchar.或者varchar.char。MySQL将记住宣称的类型并坚持下去......varchar.是实施的FIELD.H.Field.cc.通过新课程field_varstring.......myisam.实施varchar.两者都是动态长度和固定长度的行(用信号通知Row_Format.旗帜) ...varchar.现在存储尾随空格。(如果他们不适合,那就是严格模式的错误。)落后空间在比较中并不重要......表格 - >记录,空格为长度(1或2个字节)加数据...用于存储长度的字节数在该字段中field_varchar-> lengeal_bytes.。请注意,即使在内部也可以是2field_varchar-> field_length.<256(例如,用于缩短键瓦尔(256))...有一个新的宏,ha_varchar_packlength(field_length),可以使用字段 - >长度在write_row / read_row中检查使用了多少长度字节。(在此上下文中,我们不能拥有Field_Length <256,其中2字节包长度为...为处理程序创建密钥时,ha_keytype_vartext1.ha_keytype_binary1.用于具有1字节长度前缀的列上的键ha_keytype_vartext2.ha_keytype_binary2.对于具有2字节长度前缀的列。(在未来我们可能会删除ha_keytype_binary#,因为这可以通过使用它来完成二进制字符集ha_keytype_vartext#。)...向处理程序发送密钥时index_read()或records_in_range,我们始终使用2字节的长度varchar.让事情更简单。(对于版本5.1我们打算改变chars还为这些函数使用2字节长度,因为这将加速并简化处理程序侧的键处理代码。)...测试用例文件MySQL-Test / Crounder / VARCHAR.ICC应该包含在测试处理程序的代码中。看t / myisam.test.如何使用它。您应该验证结果对此mysql-test / t / myisam.result确保您获得正确的结果......客户看到旧和新的varchar.键入mysql_type_var_string.。它永远不会(至少5.0)看到mysql_type_varchar.。这确保了旧客户端将与之前工作......如果您使用mysql 5.0- 新的选项,MySQL将显示旧varchar.列为'char'显示创建表。(当测试表是使用新的时,这很有用varchar.类型与否。)

  • 数字数据类型

    重要提示:MySQL几乎始终将多字节二进制数与低字节一起存储。这被称为“Little-Endian”数字存储;它在英特尔X86机器上是正常的;MySQL即使对于非英特尔机器,也可以使用它,以便数据库将是可移植的。

    Tinyint.

    • 存储:固定长度二进制,总是一个字节。

    • 示例:ATinyint.列包含65.好像:十六进制41.- (长度= 1,值= 65)

    small

    • 存储:固定长度二进制,总是两个字节。

    • 示例:Asmall列包含65.好像:十六进制41 00- (长度= 2,值= 65)

    媒体

    • 存储:固定长度二进制,总是三个字节。

    • 示例:A媒体列包含65.好像:十六进制41 00 00- (长度= 3,值= 65)

    • 存储:固定长度二进制,总是四个字节。

    • 示例:AN.列包含65.好像:十六进制41 00 00 00- (长度= 4,值= 65)

    big

    • 存储:固定长度二进制,总是八个字节。

    • 示例:Abig列包含65.好像:Hexadecimal 41 00 00 00 00 00 00 00 00 00 00- (长度= 8,值= 65)

    漂浮

    • 存储:固定长度二进制,总是四个字节。

    • 示例:A漂浮含量约为65.好像:十六进制00 00 82 42- (长度= 4,值= 65)

    双精度

    • 存储:固定长度二进制,总是八个字节。

    • 示例:A双精度含量约为65.好像:十六进制00 00 00 00 00 00 40 50 40- (长度= 8,值= 65)

    真实的

    • 储存:与漂浮,或者双精度,取决于的设置- 斯西选项。

    十进制

    • MySQL 4.1存储:固定长度字符串,具有标志的前导字节,如果有的话。

    • 示例:A十进制(2)列包含65.好像:十六进制20 36 35- (长度= 3,值='65'

    • 示例:A十进制(2)无符号列包含65.好像:十六进制36 35.- (长度= 2,值='65'

    • 示例:A十进制(4,2)无符号列包含65.好像:十六进制36 35 2E 30 30- (长度= 5,值='65 .00'

    • MySQL 5.0存储:高字节第一,四字节块。我们调用四字节块“*十进制*数字”。由于2 ** 32 =有一个隐含的小数点。详细信息在/ ringing/decimal.c中。

    • 示例:MySQL 5.0十进制(21,9)列包含111222333444.555666777好像:十六进制80 6F 0D 40 8A 04 21 1E CD 59- (标志+'111','22233444','55566677')。

    数字

    • 储存:与十进制

    BOOL.

    • 储存:与Tinyint.

  • 时间数据类型

    日期

    • 存储:3字节整数,低字节。包装为:'日+月* 32 +年* 16 * 32'

    • 示例:A日期列包含'1962-01-02'好像:十六进制22 54 0F

    约会时间

    • 存储:八个字节。

    • 第1部分是包含年份* 10000 +月份* 100 +日的32位整数。

    • 第2部分是包含小时* 10000 +分钟* 100 +秒的32位整数。

    • 示例:A约会时间'0001-01-01 01:01:01'好像:十六进制B5 2E 11 5A 02 00 00 00

    时间

    • 存储:3个字节,首先低字节。这是秒:天* 24 * 3600 +时间* 3600 +分钟* 60 +秒

    • 示例:A时间列包含'1 02:03:04'(1天2小时3分4秒)看起来像:十六进制58 6E 01

    时间戳

    • 存储:首先4个字节,低字节。存储为UNIX.时间()从时期(00:00:00 UTC,1970年1月1日),这是几秒钟)。

    • 示例:A时间戳列包含'2003-01-01 01:01:01'好像:十六进制4D AE 12 23

    • 存储:与无符号相同Tinyint.基本值为0 = 1901。

  • 其他

    • 存储:集合中的每个八个成员的一个字节。

    • 最大长度:八个字节(最多64个成员)。

    • 这是一个位列表。最低有效位对应于该集合的第一个列出的成员。

    • 示例:A设置('a','b','c')列包含'一种'好像:01.- (长度= 1,值='a')

    枚举

    • 存储:一个字节,如果少于256个替代方案,否则为两个字节。

    • 这是一个索引。值1对应于第一个列出的替代方案。(笔记:枚举始终为错误值保留值0。这解释了为什么'一种'是1而不是0)

    • 示例:AN.枚举('a','b','c')列包含'一种'好像:01.- (长度= a')

  • 大量数据类型

警告:因为Tinyblob.前面的长度是一个字节长(一个大小Tinyint.) 和博尔布前面的长度是三个字节长(a的大小媒体),很容易认为有些对应关系斑点类型。没有A.斑点前面的长度不是四个字节长(尺寸)。Tinyblob.

    • 存储:可变长度字符串,具有前面的一个字节长度。

    • 示例:ATinyblob.列包含'一种'好像:十六进制01 41.- (长度= a')

    TinyText.

    • 储存:与Tinyblob.

    斑点

    • 存储:可变长度字符串,具有前面的双字节长度。

    • 示例:A斑点列包含'一种'好像:十六进制01 00 41- (长度= a')

    文本

    • 储存:与斑点

    博尔布

    • 存储:具有前一个长度的可变长度字符串。

    • 示例:A博尔布列包含'A'看起来像:十六进制01 00 00 41- (长度= a')

    媒体下文字

    • 储存:与博尔布

    Longblob.

    • 存储:具有前面的四字节长度的可变长度字符串。

    • 示例:ALongblob.列包含'一种'好像:十六进制01 00 00 00 41- (长度= a')

    longtext.

    • 储存:与Longblob.