|
|
 |
 |
|
|
 |
|
MySQL数据库技术(08)
|
|
|
|
编辑:华夏媒体 作者:未知 来源:网络 时间:2006-07-29 总浏览量:2164 |
|
文字大小:[ 大 中 小 ]
文字颜色: 双击滚屏/单击停止 |
|
[上一页] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [下一页]
|
值的最大限额为2 4 M B)。 表2 - 8给出了MySQL 定义串值列的类型,以及每种类型的最大尺寸和存储需求。对于可变长的列类型,各行的值所占的存储量是不同的,这取决于实际存放在列中的值的长度。这个长度在表中用L 表示。
 L 以外所需的额外字节为存放该值的长度所需的字节数。MySQL 通过存储值的内容及其长度来处理可变长度的值。这些额外的字节是无符号整数。请注意,可变长类型的最大长度、此类型所需的额外字节数以及占用相同字节数的无符号整数之间的对应关系。例如, MEDIUMBLOB 值可能最多22 4 - 1字节长并需要3 个字节记录其结果。3 个字节的整数类型MEDIUMINT 的最大无符号值为22 4 - 1。这并非偶然。 1. CHAR 和VARCHAR 列类型 CHAR 和VARCHAR 是最常使用的串类型。它们是有差异的, CHAR 是定长类型而VARCHAR 是可变长类型。CHAR(M) 列中的每个值占M 个字节;短于M 个字节的值存储时在右边加空格(但右边的空格在检索时去掉)。VARCHAR(M) 列的值只用所必需的字节数来存放(结尾的空格在存储时去掉,这与ANSI SQL 的VARCHAR 值的标准不同),然后再加一个字节记录其长度。如果所需的值在长度上变化不大,则CHAR 是一种比VARCHAR 好的选择,因为处理行长度固定的表比处理行长度可变的表的效率更高。如果所有的值长度相同,由于需要额外的字节来记录值的长度,VARCHAR 实际占用了更多的空间。在MySQL 3.23 以前,CHAR 和VARCHAR 列用最大长度为1 到255 的M 来定义。从MySQL 3.23 开始,CHAR(0) 也是合法的了。在希望定义一个列,但由于尚不知道其长度,所以不想给其分配空间的情况下, CHAR(0) 列作为占位符很有用处。以后可以用A LT E RTABLE 来加宽这个列。如果允许其为N U L L,则CHAR(0) 列也可以用来表示o n / o ff 值。这样的列可能取两个值,NULL 和空串。CHAR(0) 列在表中所占的空间很小,只占一位。除少数情况外,在同一个表中不能混用CHAR 和VA R C H A R。MySQL 根据情况甚至会将列从一种类型转换为另一种类型。这样做的原因如下: ■ 行定长的表比行可变长的表容易处理(其理由请参阅2 . 3节“选择列的类型”)。 ■ 表行只在表中所有行为定长类型时是定长的。即使表中只有一列是可变长的,该表的行也是可变长的。 ■ 因为在行可变长时定长行的性能优点完全失去。所以为了节省存储空间,在这种情况下最好也将定长列转换为可变长列。这表示,如果表中有VARCHAR 列,那么表中不可能同时有CHAR 列;MySQL 会自动地将它们转换为VARCHAR 列。例如创建如下一个表:
 请注意,VARCHAR 列的出现使MySQL 将c1 也转换成了VARCHAR 类型。如果试图用A LTER TABLE 将c1 转换为C H A R,将不起作用。将VARCHAR 列转换为CHAR 的惟一办法是同时转换表中所有VARCHAR 列:
 BLOB 和TEXT 列类型像VARCHAR 一样是可变长的,但是它们没有定长的等价类型,因此不能在同一表中与BLOB 或TEXT 列一起使用CHAR 列。这时任何CHAR 列都将被转换为VARCHAR 列。定长与可变长列混用的情形是在CHAR 列短于4 个字符时,可以不对其进行转换。例如,MySQL 不会将下面所创建的表中的CHAR 列转换为VARCHAR 列:
 短于4个字符的列不转换的原因是,平均情况下,不存储尾空格所节省的空间被VA R C H A R列中记录每个值的长度所需的额外字节所抵消了。实际上,如果所有列都短, MySQL 将会把所定义的所有列从VARCHAR 转换为C H A R。MySQL 这样做的原因是,这种转换平均来说不会增加存储需求,而且使表行定长,从而改善了性能。如果按如下创建一个表,VARCHAR 列全都会转换为CHAR 列:

 2. BLOB 与TEXT 列类型 BLOB 是一个二进制大对象,是一个可以存储大量数据的容器,可以使其任意大。在MySQL 中,BLOB 类型实际是一个类型系列( T I N Y B L O B、B L O B、M E D I U M B L O B、L O N G B L O B),除了在可以存储的最大信息量上不同外(请参阅表2 - 8),它们是等同的。 MySQL 还有一个TEXT 类型系列( T I N Y T E X T、T E X T、M E D I U M T E X T、L O N G T E X T)。除了用于比较和排序外,它们在各个方面都与相应的BLOB 类型等同,BLOB 值是区分大小写的,而TEXT 值不区分大小写。BLOB 和TEXT 列对于存储可能有很大增长的值或各行大小有很大变化的值很有用,例如,字处理文档、图像和声音、混合数据以及新闻文章等等。BLOB 或TEXT 列在MySQL 3.23 以上版本中可以进行索引,虽然在索引时必须指定一个用于索引的约束尺寸,以免建立出很大的索引项从而抵消索引所带来的好处。除此之外,一般不通过查找BLOB 或TEXT 列来进行搜索,因为这样的列常常包含二进制数据(如图像)。常见的做法是用表中另外的列来记录有关BLOB 或TEXT 值的某种标识信息,并用这些信息来确定想要哪些行。使用BLOB 和TEXT 列需要特别注意以下几点:
|
|
[上一页] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [下一页]
|
|
|
打印 收藏 关闭 至顶部 |
|
 |
|