|
|
 |
 |
|
|
 |
|
MySQL数据库技术(08)
|
|
|
|
编辑:华夏媒体 作者:未知 来源:网络 时间:2006-07-29 总浏览量:2156 |
|
文字大小:[ 大 中 小 ]
文字颜色: 双击滚屏/单击停止 |
|
[上一页] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [下一页]
|
形式进行检索时,才能够与空串区分开:
 SET 列的数值表示与ENUM 列的表示有所不同,集合成员不是顺序编号的。每个成员对应SET 值中的一个二进制位。第一个集合成员对应于0 位,第二个成员对应于1 位,如此等等。数值SET 值0 对应于空串。SET 成员以位值保存。每个字节的8 个集合值可按此方式存 放,因此SET 列的存储大小是由集合成员的数目决定的,最多64 个成员。对于大小为1 到8、9 到1 6、17 到2 4、25 到3 2、33 到64 个成员的集合,其SET 值分别占用1、2、3、4 或8个字节。 用一组二进制位来表示SET 正是允许SET 值由多个集合成员组成的原因。值中二进制位的任意组合都可以得到,因此,相应的值可由对应于这些二进制位的SET 定义中的串组合构成。下面给出一个说明SET 列的串形式与数值形式之间关系的样例;数值以十进制形式和二 进制形式分别给出:
 如果给SET 列赋予一个含有未作为集合成员列出的子串的值,那么这些子串被删除,并将包含其余子串的值赋予该列。在赋值给SET 列时,子串不需要按定义该列时的顺序给出。但是,在以后检索该值时,各成员将按定义时的顺序列出。假如用下面的定义定义一个S E T列来表示家具:
 如果给这个列赋予“ c h a i r, couch, table”值,那么,“c o u c h”被放弃,因为它不是集合的成员。其次,以后检索这个值时,显示为“ table, chair”。之所以这样是因为MySQL 针对所赋的值的每个子串决定各个二进制位并在存储值时将它们置为1。“c o u c h”不对应二进制位,则忽略。在检索时,MySQL 按顺序扫描各二进制位,通过数值值构造出串值,它自动地将子串排成定义列时给出的顺序。这个举动还表示,如果在一个值中不止一次地指定某个成员,但在检索时它也只会出现一次。如果将“ lamp, lamp,lamp”赋予某个SET 列,检索时也只会得出“l a m p”。MySQL 重新对SET 值中的成员进行排序这个事实表示,如果用一个串来搜索值,则必须以正确的顺序列出各成员。如果插入“ c h a i r, table”,然后搜索“c h a i r, table”,那么将找不到相应的记录;必须查找“ table, chair”才能找到。ENUM 和SET 列的排序和索引是根据列值的内部值(数值值)进行的。下面的例子可能会显示不正确,因为各个值并不是按字母顺序存储的:

 NULL 值排在其他值前(如果是降序,将排在其他值之后)。如果有一个固定的值集,并且希望按特殊的次序进行排序,可利用ENUM 的排序顺序。在创建表时做一个ENUM 列,并在该列的定义中以所想要的次序给出各枚举值即可。如果希望ENUM 按正常的字典顺序排序,可使用C O N C AT( ) 和排序结果将列转换成一个非ENUM 串,如下所示:
 4. 串列类型属性 可对CHAR 和VARCHAR 类型指定B I N A RY 属性使列值作为二进制串处理(即,在比较和排序操作区分大小写)。 可对任何串类型指定通用属性NULL 和NOT NULL。如果两者都不指定,缺省值为N U L L。但是定义某个串列为NOT NULL 并不阻止其取空串。空值不同于遗漏的值,因此,不要错误地认为可以通过定义NOT NULL 来强制某个串列只包含非空的值。如果要求串值非 空,那么这是一个在应用程序中必须强制实施的约束条件。 还可以对除BLOB 和TEXT 类型外的所有串列类型用D E FA U LT 属性指定一个缺省值。如果不指定缺省值, MySQL 会自动选择一个。对于可以包含NULL 的列,其缺省值为N U L L。对于不能包含NULL 的列,除ENUM 列外都为空串,在ENUM 列中,缺省值为第一个枚举成员(对于SET 类型,在相应的列不能包含NULL 时其缺省值实际上是空集,不过这里空集等价于空串)。 2.2.4 日期和时间列类型 MySQL 提供了几种时间值的列类型,它们分别是: DATE、DATE TIME、TIME、TIMES TAMP 和YEAR。表2-9 给出了MySQL 为定义存储日期和时间值所提供的这些类型,并给出了每种类型的合法取值范围。YEAR 类型是在MySQL 3.22版本中引入的。其他类型在所有MySQL 版本中都可用。每种时间类型的存储需求见表2 - 1 0。每个日期和时间类型都有一个“零”值,在插入该类型的一个非法值时替换成此值,见表2 - 11。这个值也是定义为NOT NULL 的日期和时间列的缺省值。

 MySQL 表示日期时根据ANSI 规范首先给出年份。例如,1999 年12 月3 日表示为“1 9 9 9 - 1 2 - 0 3”。MySQL 允许在输入日期 时有某些活动的余地。如能将两个数字的年份转换成四位数字的年份,而且在输入小于10 的月份和日期时不用输入前面的那位数字。但是必须首先给出年份。平常经常使用的那些格式,如“ 1 2 / 3 / 9 9”或“3 / 1 2 / 9 9”,都是不正确的。MySQL 使用的日期表示规则请参阅“处理日期和时间列”小节。时间值按本地时区返回给服务器; MySQL 对返回给客户机的值不作任何时区调整。
|
|
[上一页] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [下一页]
|
|
|
打印 收藏 关闭 至顶部 |
|
 |
|