接下来,我将在一行中描述每列的物理属性。格式完全取决于数据类型和列的大小,因此,对于每个数据类型,我将给出描述和一个例子。
所有类型都在包含/ 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
-
存储:固定长度串,右侧具有空间填充。
示例:A
Char(5)
包含值的列'一种'
好像:十六进制41 20 20 20 20
- (长度= a ??' code>)
varchar.
存储:具有前一个长度的可变长度字符串。
示例:A
瓦尔(7)
列包含'一种'
好像:十六进制01 41.
- (长度= a' code>)在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.
)。(这意味着旧表将与用户一起使用。)...与上述情况相比,不再有任何自动变化char
至varchar.
或者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我们打算改变char
s还为这些函数使用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.
存储:固定长度二进制,总是一个字节。
示例:A
Tinyint.
列包含65.
好像:十六进制41.
- (长度= 1,值= 65)
small
存储:固定长度二进制,总是两个字节。
示例:A
small
列包含65.
好像:十六进制41 00
- (长度= 2,值= 65)
媒体
存储:固定长度二进制,总是三个字节。
示例:A
媒体
列包含65.
好像:十六进制41 00 00
- (长度= 3,值= 65)
㈡
存储:固定长度二进制,总是四个字节。
示例:AN.
㈡
列包含65.
好像:十六进制41 00 00 00
- (长度= 4,值= 65)
big
存储:固定长度二进制,总是八个字节。
示例:A
big
列包含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.
-
存储:可变长度字符串,具有前面的一个字节长度。
示例:A
Tinyblob.
列包含'一种'
好像:十六进制01 41.
- (长度= a')
TinyText.
储存:与
Tinyblob.
。
斑点
存储:可变长度字符串,具有前面的双字节长度。
示例:A
斑点
列包含'一种'
好像:十六进制01 00 41
- (长度= a')
文本
储存:与
斑点
。
博尔布
存储:具有前一个长度的可变长度字符串。
示例:A
博尔布
列包含'
A'看起来像:十六进制01 00 00 41
- (长度= a')
媒体下文字
储存:与
博尔布
。
Longblob.
存储:具有前面的四字节长度的可变长度字符串。
示例:A
Longblob.
列包含'一种'
好像:十六进制01 00 00 00 41
- (长度= a')
longtext.
储存:与
Longblob.
。