竹磬网-邵珠庆の日记 生命只有一次,你可以用它来做些更多伟大的事情–Make the world a little better and easier


112月/130

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使用andornot表示逻辑运算。
  • 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()外,大多数数学函数处于mathcmath模块内。前者用于实数运算,而后者用于复数运算。使用时需要先导入它们,比如:

>>> 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 < ca < b and b < c等价。C++的结果与Python不一样,首先它会先计算a < b,根据两者的大小获得0或者1两个值之一,然后再与c进行比较。

52月/130

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('不是数字');}

这两种方法的区别是  is_numeric小数也会认为是数字,而前面正则会把小数点当作字符。

附一些常用的正则运算:

验证数字:^[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)  ^\d+$
验证非正整数(负整数 + 0)  ^((-\d+)|(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)$    正确格式为:01、09和1、31。
整数:^-?\d+$
非负浮点数(正浮点数 + 0):^\d+(\.\d+)?$
正浮点数   ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
非正浮点数(负浮点数 + 0) ^((-\d+(\.\d+)?)|(0+(\.0+)?))$
负浮点数  ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
浮点数  ^(-?\d+)(\.\d+)?

 

 

 

59月/118

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