Python 入門語法和類型
Python的设计目标之一是让源代码具备高度的可读性。它设计时尽量使用其它语言经常使用的标点符号和英语单词,让源代码整体看起来很整洁美观。它不像静态语言如C、Pascal那样需要重复书写声明语句,也不像它们的语法那样经常有特殊情况和惊喜。
缩进
Python开发者有意让违反了缩进规则的程序不能通过编译,以此来强制程序员养成良好的编程习惯。并且在Python语言里,缩进而非花括号或者某种关键字,被用于表示语句块的开始和退出。增加缩进表示语句块的开始,而减少缩进则表示语句块的退出。缩进成为了语法的一部分。例如
if
语句:
if age < 21: print("你不能買酒。") print("不過你能買口香糖。") print("這句話處於if語句塊的外面。")
根据PEP的规定,必须使用4个空格来表示每级缩进。使用Tab字符和其它数目的空格虽然都可以编译通过,但不符合编码规范。支持Tab字符和其它数目的空格仅仅是为了兼容很旧的Python程序和某些有问题的编辑器。
语句和控制流
if
语句,当条件成立时执行语句块。经常与else
,elif
(相当于else if
)配合使用。for
语句,遍历列表、字符串、字典、集合等迭代器,依次处理迭代器中的每个元素。while
语句,当条件为真时,循环执行语句块。try
语句。与except
,finally
配合使用处理在程序运行中出现的异常情况。class
语句。用于定义类型。def
语句。用于定义函数和类型的方法。pass
语句。表示此行为空,不执行任何操作。assert
语句。用于程序调试阶段时测试运行条件是否满足。with
语句。Python2.6以后定义的语法,在一个场景中运行语句块。比如,运行语句块前加锁,然后在语句块运行结束后释放它。yield
语句。在迭代器函数内使用,用于返回一个元素。自从Python 2.5版本以后。这个语句变成一个运算符。
表达式
Python的表达式写法与C/C++类似。只是在某些写法有所差别。
- 主要的算术运算符与C/C++类似。
+, -, *, /, //, **, ~, %
分别表示加法或者取正、减法或者取负、乘法、除法、整除、乘方、取补、取模。>>, <<
表示右移和左移。&, |, ^
表示二进制的AND, OR, XOR
运算。>, <, ==, !=, <=, >=
用于比较两个表达式的值,分别表示大于、小于、等于、不等于、小于等于、大于等于。在这些运算符里面,~, |, ^, &, <<, >>
必须应用于整数。 - Python使用
and
,or
,not
表示逻辑运算。 is, is not
用于比较两个变量是否是同一个对象。in, not in
用于判断一个对象是否属于另外一个对象。- Python支持"列表推导式"(list comprehension),比如计算0-9的平方和:
>>> sum(x * x for x in range(10))285
- Python使用
lambda
表示匿名函数。匿名函数体只能是表达式。比如:
>>> add=lambda x, y : x + y>>> add(3,2)5
- Python使用
y if cond else x
表示条件表达式。意思是当cond
为真时,表达式的值为y
,否则表达式的值为x
。相当于C++和Java里的cond?y:x
。 - Python区分列表(list)和元组(tuple)两种类型。list的写法是
[1,2,3]
,而tuple的写法是(1,2,3)
。可以改变list中的元素,而不能改变tuple。在某些情况下,tuple的括号可以省略。tuple对于赋值语句有特殊的处理。因此,可以同时赋值给多个变量,比如:
>>> x, y=1, 2 #同时给x,y赋值,最终结果:x=1, y=2
特别地,可以使用以下这种形式来交换两个变量的值:
>>> x, y=y, x #最终结果:y=1, x=2
- Python使用'(单引号)和"(双引号)来表示字符串。与Perl、Unix Shell语言或者Ruby、Groovy等语言不一样,两种符号作用相同。一般地,如果字符串中出现了双引号,就使用单引号来表示字符串;反之则使用双引号。如果都没有出现,就依个人喜好选择。出现在字符串中的\(反斜杠)被解释为特殊字符,比如
\n
表示换行符。表达式前加r
指示Python不解释字符串中出现的\。这种写法通常用于编写正则表达式或者Windows文件路径。
- Python支持列表切割(list slices),可以取得完整列表的一部分。支持切割操作的类型有
str, bytes, list, tuple
等。它的语法是...[left:right]
或者...[left:right:stride]
。假定nums
变量的值是[1, 3, 5, 7, 8, 13, 20]
,那么下面几个语句为真:
-
nums[2:5] == [5, 7, 8]
从下标为2的元素切割到下标为5的元素,但不包含下标为2的元素。nums[1:] == [3, 5, 7, 8, 13, 20]
切割到最后一个元素。nums[:-3] == [1, 3, 5, 7]
从最开始的元素一直切割到倒数第3个元素。nums[:] == [1, 3, 5, 7, 8, 13, 20]
返回所有元素。改变新的列表不会影响到nums。nums[1:5:2] == [3, 7]
函数
Python的函数支持递归、默认参数值、可变参数,但不支持函数重载。为了增强代码的可读性,可以在函数后书写”文档字符串“(Documentation Strings,或者简称docstrings),用于解释函数的作用、参数的类型与意义、返回值类型与取值范围等。可以使用内置函数help()
打印出函数的使用帮助。比如:
1 >>> def randint(a, b): 2 ... "Return random integer in range [a, b], including both end points." 3 ... 4 >>> help(randint) 5 Help on function randint in module __main__: 6 7 randint(a, b) 8 Return random integer in range [a, b], including both end points.
对象的方法
对象的方法是指绑定到对象的函数。调用对象方法的语法是instance.method(arguments)
。它等价于调用Class.method(instance, arguments)
。当定义对象方法时,必须显式地定义第一个参数为self
,用于访问对象的内部数据。self
相当于C++, Java里面的this
变量。比如:
class Fish: def eat(self, food): if food is not None: self.hungry=False #构造Fish的实例: f=Fish() #以下两种调用形式是等价的: Fish.eat(f, "earthworm") f.eat("earthworm")
Python认识一些以”__“开始并以"__"结束的特殊方法名,它们用于实现运算符重载和实现多种特殊功能。
类型
Python采用动态类型系统。在编译的时候,Python不会检查对象是否拥有被调用的方法或者属性,而是直至运行时,才做出检查。所以操作对象时可能会抛出异常。不过,虽然Python采用动态类型系统,它同时也是强类型的。Python禁止没有明确定义的操作,比如数字加字符串。
与其它面向对象语言一样,Python允许程序员定义类型。构造一个对象只需要像函数一样调用类型即可,比如,对于前面定义的Fish
类型,使用Fish()
。类型本身也是特殊类型type
的对象(type
类型本身也是type
对象),这种特殊的设计允许对类型进行反射编程。
Python内置丰富的数据类型。与Java、C++相比,这些数据类型有效地减少代码的长度。下面这个列表简要地描述了Python内置数据类型(适用于Python 3.x):
类型 | 描述 | 例子 |
---|---|---|
str | 一个由字符组成的不可更改的有串行。在Python 3.x里,字符串由Unicode字符组成。 | 'Wikipedia' "Wikipedia" """Spanning multiple lines""" |
bytes | 一个由字节组成的不可更改的有串行。 | b'Some ASCII' b"Some ASCII" |
list | 可以包含多种类型的可改变的有串行 | [4.0, 'string', True] |
tuple | 可以包含多种类型的不可改变的有串行 | (4.0, 'string', True) |
set, frozenset | 与数学中集合的概念类似。无序的、每个元素唯一。 | {4.0, 'string', True} frozenset([4.0, 'string', True]) |
dict | 一个可改变的由键值对组成的无串行。 | {'key1': 1.0, 3: False} |
int | 精度不限的整数 | 42 |
float | 浮点数。精度与系统相关。 | 3.1415927 |
complex | 复数 | 3+2.7j |
bool | 逻辑值。只有两个值:真、假 | True False |
除了各种数据类型,Python语言还用类型来表示函数、模块、类型本身、对象的方法、编译后的Python代码、运行时信息等等。因此,Python具备很强的动态性。
数学运算
Python使用与C、Java类似的运算符,支持整数与浮点数的数学运算。同时还支持复数运算与无穷位数(实际受限于计算机的能力)的整数运算。除了求绝对值函数abs()
外,大多数数学函数处于math
和cmath
模块内。前者用于实数运算,而后者用于复数运算。使用时需要先导入它们,比如:
>>> import math >>> print(math.sin(math.pi/2)) 1.0
fractions
模块用于支持分数运算;decimal
模块用于支持高精度的浮点数运算。
Python定义求余运行a % b
的值处于开区间[0, b)
内,如果b
是负数,开区间变为(b, 0]
。这是一个很常见的定义方式。不过其实它依赖于整除的定义。为了让方程式:b * (a // b) + a % b = a
恒真,整除运行需要向负无穷小方向取值。比如7 // 3
的结果是2
,而(-7) // 3
的结果却是-3
。这个算法与其它很多编程语言不一样,需要注意,它们的整除运算会向0的方向取值。
Python允许像数学的常用写法那样连着写两个比较运行符。比如a < b < c
与a < b and b < c
等价。C++的结果与Python不一样,首先它会先计算a < b
,根据两者的大小获得0或者1两个值之一,然后再与c进行比较。
PHP的简单正则判断字符串类型
前两天写PHP代码的时候遇到要判断一个变量是否为数字,所以就把相关的文章简单的摘抄了过来:
php 正则验证字符串是否为数字
方法一:
php中利用正则表达式验证字符串是否为数字一件非常容易的事情,最主要的是如何写好正则表达式以及掌握正则表达式的写法,在此利用正则表达式的方式来列举一下判断数字的方法。
<?
if($str){
if(eregi("^[0-9]+$",$str)){
$str=(int)$str;
}else{
echo "获取到的数据不是有效的数字类型,操作将停止!";
exit();
}
}else{
echo "需要验证的数据为空,操作停止!";
exit();
}
?>
方法二:
建议大家对关键的参数必须做过滤。
如数字正则过滤
if(preg_match("/^\d*$/",$fgid)) {echo('是数字');}else{echo('不是数字');}
或者用函数
if(is_numeric($fgid)) {echo('是数字');}else{ echo('不是数字');}
这两种方法的区别是
附一些常用的正则运算:
验证数字:^[0-9]*$
验证n位的数字:^\d{n}$
验证至少n位数字:^\d{n,}$
验证m-n位的数字:^\d{m,n}$
验证零和非零开头的数字:^(0|[1-9][0-9]*)$
验证有两位小数的正实数:^[0-9]+(.[0-9]{2})?$
验证有1-3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$
验证非零的正整数:^\+?[1-9][0-9]*$
验证非零的负整数:^\-[1-9][0-9]*$
验证非负整数(正整数 + 0)
验证非正整数(负整数 + 0)
验证长度为3的字符:^.{3}$
验证由26个英文字母组成的字符串:^[A-Za-z]+$
验证由26个大写英文字母组成的字符串:^[A-Z]+$
验证由26个小写英文字母组成的字符串:^[a-z]+$
验证由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$
验证由数字、26个英文字母或者下划线组成的字符串:^\w+$
验证用户密码:^[a-zA-Z]\w{5,17}$ 正确格式为:以字母开头,长度在6-18之间,只能包含字符、数字和下划线。
验证是否含有 ^%&‘,;=?$\” 等字符:[^%&‘,;=?$\x22]+
验证汉字:^[\u4e00-\u9fa5],{0,}$
验证Email地址:^\w+[-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
验证InternetURL:^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$ ;^[a-zA-z]+://(w+(-w+)*)(.(w+(-w+)*))*(?S*)?$
验证电话号码:^(\(\d{3,4}\)|\d{3,4}-)?\d{7,8}$:–正确格式为:XXXX-XXXXXXX,XXXX-XXXXXXXX,XXX-XXXXXXX,XXX-XXXXXXXX,XXXXXXX,XXXXXXXX。
验证身份证号(15位或18位数字):^\d{15}|\d{}18$
验证一年的12个月:^(0?[1-9]|1[0-2])$ 正确格式为:“01”-“09”和“1”“12”
验证一个月的31天:^((0?[1-9])|((1|2)[0-9])|30|31)$
整数:^-?\d+$
非负浮点数(正浮点数 + 0):^\d+(\.\d+)?$
正浮点数
非正浮点数(负浮点数 + 0) ^((-\d+(\.\d+)?)|(0+(\.0+)?))$
负浮点数
浮点数
MySQL字段类型
MySQL字段类型
按下列约定给出类型名说明:
[ ] 可选信息。
M 最大显示宽度。除非另有说明,否则M 应该是一个1到255 之间的整数。
D 有小数部分的类型的小数位数。D 为一个0 到30 之间的整数。D 应该小于等于M - 2。否则,M 的值将调整为D + 2。
在ODBC 术语中,M 和D 称为“精度”和“小数位数”。
为了描述每种类型,提供下列一个或多个信息:
说明 该类型的简短说明。
允许的属性 在CREATE TABLE 或ALTER TABLE 语句中与该类型相关的可选属性关键字。属性按字母顺序列出,但这个顺序并不一定与CREATE TABLE 或ALTE R TABLE 中使用的顺序相对应。关于这些语句的语法请参阅附录D。每种列类型在说明中列出的属性为通用属性之外的属性。
允许的长度 串类型的列值所允许的最大长度。
取值范围 对于数值或日期与时间类型,该类型可表示的值的范围。对于整数数值类型,给出两个取值范围,因为整数列可以是有符号或无符号的,有符号或无符号的取值范围是不同的。
零值 对于日期和时间类型,如果将非法值插入该列,则存入一个“零”值。
缺省值 类型说明中不明确给出D E FA U LT 属性时的缺省值。
存储需求 存储该类型的值所需的字节数。对于有的类型,这个值是固字的。而这个值在有些类型中根据存放在列中的值的不同是可变的。
比较 对于串类型,比较是否是区分大小写的。这对排序和索引有效,因为这些操作根据比较进行的。
同义词 该类型名的同义词。
注释 关于该类型的一些杂项说明。
通用属性 有的属性对所有类型或对于几乎所有类型都适用。它们列在这里,而不是列在每种类型的说明中。可对任何类型指定NULL 或NOT NULL 属性。还可对所有类型指定D E FA U LT default_value。
数值类型
MySQL提供了整数和浮点数的数值类型。可根据所要表示的值的范围选择相应的类型。
对于整数类型,如果指定了AUTO_INCREMENT 属性,则列必须为PRIMARY KEY 或UNIQUE 索引。将NULL 插入AUTO_INCREMENT 列将会插入一个大于该列中当前最大值的值。如果指定了UNSIGNED 属性,则相应的整数类型不允许取负值。
如果指定了ZEROFILL 属性,则用前导零填充数值类型值以达到列的显示宽度。
1. TINYINT[(M)]
说明:非常小的整数
允许的属性:AUTO _ I N C R E M E N T, UNSIGNED, ZEROFILL
取值范围:-128 到127(-27 到27-1),或者如果为U N S I G N E D,则0 到2 5 5(0 到2 8-1)
缺省值:如果列可为NULL;则为NULL;如果列为NOT NULL,则为0
存储需求:1字节
2. SMALLINT[(M)]
说明:小整数
允许的属性:AUTO _ I N C R E M E N T, UNSIGNED, ZEROFILL
取值范围:-32768 到3 27 6 7(-215 到215-1),或者如果为U N S I G N E D,则0 到6 5 5 3 5 (0 到216-1)
缺省值:如果列可为NULL;则为NULL;如果列为NOT NULL,则为0
存储需求:2 字节
3. MEDIUMINT[(M)]
说明:中等大小的整数
允许的属性:AUTO _ I N C R E M E N T, UNSIGNED, ZEROFILL
取值范围:-8388608 到8 3 8 8 6 07(-22 3 到22 3-1),或者如果为U N S I G N E D,则0 到16 7 7 2 15(0 到22 4-1)
缺省值:如果列可为NULL,则为NULL;如果列为NOT NULL,则为0
存储需求:4 字节
4. INT[(M)]
说明:标准大小的整数
允许的属性:AUTO _ I N C R E M E N T, UNSIGNED, ZEROFILL
取值范围:-2147483648 到2 14 7 4 8 3 6 4 7(-231到2 3 1-1),或者如果为U N S I G N E D,则0 到4 2 9 4 9 6 7 2 9 5(0 到2 3 2-1)
缺省值:如果列为NULL,则为NULL;如果列为NOT FULL,则为0
存储需求:4 字节
同义词:I N T E G E R [(M)]
5. BIGINT[(M)]
说明:大整数
允许的属性:AUTO _ I N C R E M E N T, UNSIGNED, ZEROFILL
取值范围:-9223372036854775808 到9 2 2 3 3 7 2 0 3 6 8 5 4 7 7 5 8 07(-263 到2 6 3-1),或者如果为U N S I G N E D,则0 到18 4 4 6 7 4 4 07 3 7 0 9 5 5 16 15(0 到26 4 -1)
缺省值:如果列可为NULL,则为NULL;如果列为NOT NULL,则为0
存储需求:8 字节
6. FLOAT [(M, D)]
说明:小浮点数;单精度(精度小于D O U B L E)
允许的属性:Z E R O F I L L
取值范围:最小非零值为±1.75494351E -38; 最大非零值为±3 . 4 0 2 8 2 3 4 6 6 E + 3 8
缺省值:如果列可为NULL,则为NULL;如果列为NOT NULL,则为0
存储需求:4 字节
同义词:MySQL3.23 版以前,FLOAT(4) 为具有缺省M 和D 值的FLOAT的同义词。
注释:在MySQL3.23 以后,FLOAT(4) 为真浮点类型(值存储为硬件所允许的完整精度,而不四舍五入为缺省的小数位数)
7. DOUBLE[(M, D)]
说明:大浮点数;双精度(比FLOAT更精确)
允许的属性:Z E R O F I L L
取值范围:最小非零值为±2 . 2 2 5 07 3 8 5 8 5 07 2 0 14 E -308; 最大非零值为±1。7 9 7 6 9 3 13 - 4 8 6 2 3 15 7 E + 3 0 8
缺省值:如果列可为NULL,则为NULL;如果列为NOT NULL,则为0
存储需求:8 字节
同义词:DOUBLE PRECISION[(M, D)] 和R E A L [ (M, D)] 为D O U B L E [(M, D)] 的同义词。MySQL3.23 版以前,FLOAT(8) 为具有缺省M 和D 值的FLOAT的同义词。
注释:在MySQL3.23 以后,FLOAT(8) 为真浮点类型(值存储为硬件所允许的完整精度,而不四舍五入为缺省的小数位数)。
8. DECIMAL(M, D)
说明:存储为串的浮点数(每位数字、小数点或“-”号都占1字节)。
允许的属性:Z E R O F I L L
取值范围:最大取值范围与DOUBLE 相同;给定DECIMAL 类型的有效取值范围由M和D 决定。如果D 为零,则列值无小数点或小数部分。
缺省值:如果列可为NULL,则为NULL,如果列为NOT NULL,则为0
存储需求:对于MySQL3.23 前的版本,为M 字节,而MySQL3.23 以后的版本,为M + 2 字节。
同义词:N U M E R I C (M, D)
注释:在MySQL3.23 以后,M 的值为符合ANSI SQL 标准,不包括符号字符或小数点所占的字节数。
MYSQL串类型
MySQL的串类型常用来存储文本,它不但是通用的而且还能存储任何数据。可用串类型来存储最大长度可变的值,而且可以选择在处理值时是否区分大小写。
1. CHAR(M)
说明:0 到M 字节长的定长字符串。在MySQL3.23 版以前,M 应该为一个1到255 之间的整数。而MySQL3.23 版以后,M 应该为一个0 到255 之间的整数。短于M 个字符的串存储进右边补空格。长于M 个字符的串存储时剪断为长度是M 的串。在检索值时,去掉后跟的空格。
允许的属性:B I N A RY
允许的长度:0 到M 字节
缺省值:如果列可为NULL,则为NULL;如果列为NOT NULL,则为“”
存储需求:M 字节
比较:不区分大小写(如果具有B I N A RY 属性,则区分大小写)
2. VARCHAR(M)
说明:0 到M 字节长的可变长字符串。M 应该为1到255 之间的一个整数,或者自MySQL3.23 后为0 到255 之间的一个整数。存储时后跟的空格被去掉。存储时,大于M 个字符的串剪断为M 个字符。
允许的属性:B I N A RY
允许的长度:0 到M 字节
缺省值:如果列可为NULL,则为NULL;如果列为NOT NULL,则为“”
存储需求:值的长度,加上1字节用来记录长度
比较:不区分大小写(如果具有B I N A RY 属性,则区分大小写)
3. TINYBLOB
说明:小BLOB 值
允许的属性:除通用属性外无其他属性
允许的长度:0 到2 5 5(0 到28-1)字节
缺省值:如果列可为NULL,则为NULL;如果列为NOT NULL,则为“”
存储需求:值的长度加上用于记录长度的1个字节
比较:区分大小写
4. BLOB
说明:常规大小的BLOB 值
允许的属性:除通用属性外无其他属性
允许的长度:0 到6 5 5 3 5(0 到216-1)字节
缺省值:如果列可为NULL,则为NULL;如果列为NOT NULL,则为“”
存储需求:值的长度加上用于记录长度的2 个字节
比较:区分大小写
5. MEDIUMBLOB
说明:中等大小的BLOB 值
允许的属性:除通用属性外无其他属性
允许的长度:0 到16 7 7 7 2 15(0 到224 -1)字节
缺省值:如果列可为NULL,则为NULL;如果列为NOT NULL,则为“”
存储需求:值的长度加上用于记录长度的3 个字节
比较:区分大小写
6. LONGBLOB
说明:大BLOB 值
允许的属性:除通用属性外无其他属性
允许的长度:0 到4 2 9 4 9 6 7 2 9 5(0 到23 2-1)字节
缺省值:如果列可为NULL,则为NULL;如果列为NOT NULL,则为“”
存储需求:值的长度加上用于记录长度的4 个字节
比较:区分大小写
7. TINYTEXT
说明:小TEXT 值
允许的属性:除通用属性外无其他属性
允许的长度:0 到2 5 5(0 到2 8 -1)字节
缺省值:如果列可为NULL,则为NULL;如果列为NOT NULL,则为“”
存储需求:值的长度加上用于记录长度的2 个字节
比较:不区分大小写
8. TEXT
说明:常规大小的TEXT 值
允许的属性:除通用属性外无其他属性
允许的长度:0 到6 5 5 3 5(0 到216-1)字节
缺省值:如果列可为NULL,则为NULL;如果列为NOT NULL,则为“”
存储需求:值的长度加上用于记录长度的2 个字节
比较:不区分大小写
9. MEDIUMTEXT
说明:中等大小的TEXT 值
允许的属性:除通用属性外无其他属性
允许的长度:0 到16 7 7 7 2 15(0 到22 4-1)字节
缺省值:如果列可为NULL,则为NULL;如果列为NOT NULL,则为“”
存储需求:值的长度加上用于记录长度的3 个字节
比较:不区分大小写
10. LONGTEXT
说明:大TEXT 值
允许的属性:除通用属性外无其他属性
允许的长度:0 到4 2 9 4 9 6 7 2 9 5(0 到23 2-1)字节
缺省值:如果列可为NULL,则为NULL;如果列为NOT NULL,则为“”
存储需求:值的长度加上用于记录长度的4 个字节
比较:不区分大小写
11. ENUM(“v a l ue 1”, “v a l ue 2”, ...)
说明:枚举,列值可赋予值列表中的某个成员
允许的属性:除通用属性外无其他属性
缺省值:如果列可为NULL,则为NULL;如果列为NOT NULL,则为第一个枚举值
存储需求:对1到255 个成员的枚举1个字节,对255 到65535 个成员的枚举2 个字节
比较:不区分大小写(MySQL3.22.1版以前区分大小写)
12. SET(“v a l ue 1”,“v a l ue 2”, ...)
说明:集合,列值可赋予值列表中的零个或多个成员
允许的属性:除通用属性外无其他属性
缺省值:如果列可为NULL,则为NULL;如果列为NOT NULL,则为“”(空集)
存储需求:1字节(1到8个成员的集合),2字节(9 到16个成员的集合),3字节(17到2 4个成员的集合),4 字节(2 5到3 2个成员的集合)或8字节(3 3到6 4个成员的集合)
比较:不区分大小写(MySQL3.22.1版以前区分大小写)
MYSQL日期和时间类型
MySQL提供以各种形式表示时间数据的类型。这些数据有日期和时间类型。有一种特殊的时间戳类型,它在记录更改时自动更新。还有一种用于存储年份的类型,在不需要完全的日期时使用。
1. DATE
说明:“Y Y Y Y- M M - D D”格式的日期
允许的属性:除通用属性外无其他属性
取值范围:“10 0 0 - 0 1- 0 1”到“9 9 9 9 - 12 - 3 1”
零值:“0 0 0 0 - 0 0 - 0 0”
缺省值:如果列可为NULL,则为NULL;如果列为NOT NULL,则为“0 0 0 0 - 0 0 - 0 0”
存储需求:3 字节(MySQL3.22 版以前为4 字节)
2. TIME
说明:“H H : M M : S S”格式的时间(负值为“ - HH:MM:SS”);表示占用的时间,但也可以作为日常时间
允许的属性:除通用属性外无其他属性
取值范围:“- 8 3 8 : 5 9 : 5 9”到“8 3 8 : 5 9 : 5 9”
零值:“0 0 : 0 0 : 0 0”
缺省值:如果列可为NULL,则为NULL;如果列为NOT NULL,则为“0 0 : 0 0 : 0 0”
存储需求:3 字节
注释:虽然在非法值插入TIME 列时,“0 0 : 0 0 : 0 0”用作零值,但它也作为一个合法的值出现在正常的取值范围内
3. DATETIME
说明:以“Y Y Y Y-MM-DD hh:mm:ss”格式表示的日期和时间(两个部分都需要)
允许的属性:除通用属性外无其他属性
取值范围:“1000-01-0100:00:00”到“9999-12-3123:59:59”
零值:“0000-00-00 00:00:00”
缺省值:如果列可为NULL,则为NULL;如果列为NOT NULL,则为“ 0 0 0 0 - 0 0 - 0 0 0 0 : 0 0 : 0 0”
存储需求:8 字节
4. TIMESTAMP [(M)]
说明:以YYYYMMDDHHMMSS 格式表示的时间(日期和时间)
允许的属性:除通用属性外无其他属性
取值范围:19700101000000 到2037 年的某个时刻
缺省值:当前日期和时间。注意DESCRIBE 和SHOW COLLUMNS 报告缺省值为NULL
存储需求:4 字节
注释:插入NULL 到表的第一个T I M E S TAMP 列将会插入当前日期和时间。更改行中其他列的值使第一个T I M E S TAMP 列被更新为这个修改的日期和时间。在内部计算中存储和使用的值全都为14 位字符精度,与显示宽度无关。如果指定了NOT NULL属性,则此属性不起作用
5. YEAR
说明:YYYY 格式表示的年份
允许的属性:除通用属性外无其他属性
取值范围:1900 到2 15 5
零值:0 0 0 0
缺省值:如果列可为NULL,则为NULL;如果列为NOT NULL,则为0 0 0 0
存储需求:1字节
注释:YEAR 是在MySQL3.22 版中引入的
MYSQL