**目录**
* [1 表格与储存引擎](https://www.kancloud.cn/thinkphp/mysql-tutorial/36441#1__3)
* [1.1 MyISAM](https://www.kancloud.cn/thinkphp/mysql-tutorial/36441#11_MyISAM_19)
* [1.2 InnoDB](https://www.kancloud.cn/thinkphp/mysql-tutorial/36441#12_InnoDB_35)
* [1.3 MEMORY](https://www.kancloud.cn/thinkphp/mysql-tutorial/36441#13_MEMORY_59)
* [1.4 储存引擎与作业系统](https://www.kancloud.cn/thinkphp/mysql-tutorial/36441#14__67)
* [2 字段资料型态](https://www.kancloud.cn/thinkphp/mysql-tutorial/36441#2__77)
* [2.1 数值](https://www.kancloud.cn/thinkphp/mysql-tutorial/36441#21__85)
* [2.2 位元](https://www.kancloud.cn/thinkphp/mysql-tutorial/36441#22__209)
* [2.3 字串](https://www.kancloud.cn/thinkphp/mysql-tutorial/36441#23__223)
* [2.4 列举与集合](https://www.kancloud.cn/thinkphp/mysql-tutorial/36441#24__305)
* [2.5 日期与时间](https://www.kancloud.cn/thinkphp/mysql-tutorial/36441#25__385)
# 1 表格与储存引擎
表格(table)是数据库中用来储存纪录的基本单位,在建立一个新的数据库以后,你必须为这个数据库建立一些储存资料的表格:
[](http://box.kancloud.cn/2015-09-15_55f7e84a3a7d1.png)
每一个数据库都会使用一个资料夹,这些数据库资料夹用来储存所有数据库各自需要的档案:
[](http://box.kancloud.cn/2015-09-15_55f7e84d02adb.png)
“Storage engine、储存引擎”是MySQL用来储存资料的技术,为了数据库多样化的应用,你可以在建立表格的时候,依照自己的需求指定一种储存引擎,不同的储存引擎会有不同的资料储存方式与运作的特色。MySQL提供许多储存引擎让你选择,下列是主要的三种储存引擎的简介:
* MyISAM:MySQL默认的储存引擎,虽然它支援的功能并没有像一般的数据库那么多(例如交易、transaction);不过也因为它比较简单,所以运作的效率相对也比较好
* InnoDB:这种储存引擎所提供的功能已经跟大型的商用数据库软件一样了,像是交易(transaction)、纪录锁定(row-level locking) 与自动回复(auto-recovery)。
* MEMORY:这是一个比较特殊的储存引擎,它把资料储存在纪忆体中,所以运作的效率是最快的;不过只要MySQL服务器关闭后,储存的资料就全部不见了。
## 1.1 MyISAM
“MyISAM”是MySQL默认的储存引擎,“默认”的意思是如果你在建立表格的时候没有指定一种储存引擎,MySQL会帮你建立的新表格指定为“MyISAM”储存引擎。以下列一个使用MyISAM储存引擎的数据库来说,在数据库资料夹中的档案会像这样:
[](http://box.kancloud.cn/2015-09-15_55f7e8539b492.png)
当你建立一个表格以后,“MyISAM”储存引擎会建立以表格名称为档案名称的三个档案,以“city”表格来说:
[](http://box.kancloud.cn/2015-09-15_55f7e8543e60e.png)
使用“MyISAM”储存引擎的数据库具有“可携性、portable”的特色,你可以很容易的把一个数据库复制到另外一台电脑的MySQL服务器中:
[](http://box.kancloud.cn/2015-09-15_55f7e854ab4ed.png)
注:使用“MyISAM”储存引擎时,MySQL并不会限制一个数据库中可以包含的表格数量。不过一个表格会在档案系统中建立三个档案,如果超过作业系统对于档案数量或容量的限制,你就不能再建立任何新的表格。
## 1.2 InnoDB
MySQL数据库服务器从3.23.49版本开始把“InnoDB”储存引擎列为正式支援的功能,所以从这个版本开始,MySQL也提供与大型商用数据库软件一样的功能。最主要的功能是支援“交易、transaction”,在比较复杂的数据库应用系统中,很常遇到这样的情况:
[](http://box.kancloud.cn/2015-09-15_55f7e855394d4.png)
在顺利的情况下,当然不会有任何问题。可是如果发生下列的情况:
[](http://box.kancloud.cn/2015-09-15_55f7e8559c64b.png)
这样的情况是一定要避免,否则数据库中储存的资料就会出现很大的问题了。所以一般的大型商用数据库都会使用交易的功能来处理这样的情况:
[](http://box.kancloud.cn/2015-09-15_55f7e86168f52.png)
“InnoDB”储存引擎除了提供许多功能外,与“MyISAM”储存引擎最大的差异是档案的储存方式:
[](http://box.kancloud.cn/2015-09-15_55f7e861ea9a8.png)
“InnoDB”储存引擎实际储存在档案系统中的档案会像这样:
[](http://box.kancloud.cn/2015-09-15_55f7e862423fa.png)
注:因为使用“InnoDB”储存引擎的表格会使用同一个储存空间,所以不同数据库的表格资料也会储存在一起。“InnoDB”储存引擎限制在这个共用的储存空间中不能超过两百万个表格。
## 1.3 MEMORY
“MEMORY”储存引擎与其它储存引擎有一个主要的差异,就是它会把纪录与索引资料储存在内存中。所以使用“MEMORY”储存引擎的表格,不论在查询或维护资料时的效率都是很好的。在档案系统中储存的档案只有“frm”档,也就是储存表格结构资讯的档案:
[](http://box.kancloud.cn/2015-09-15_55f7e866c5af6.png)
注:因为“MEMORY”储存引擎会把纪录与索引资料储存在内存中,所以只要MySQL服务器关闭、重新启动、当机,所有使用“MEMORY”储存引擎的表格资料都会全部消失,只剩下表格结构;它也不适合储存大量资料的表格,会耗用太多内存
## 1.4 储存引擎与作业系统
虽然MySQL数据库是一个独立运作的软件,不过它还是得安装在某一个作业系统中,例如Windows或Linux。而由作业系统控制的档案系统可能会有许多限制,例如档案的数量和档案的大小。如果MySQL数据库软件在建立或使用数据库档案的时候,超过作业系统的限制,就会发生错误。
如果以支援的功能来决定储存引擎的话,那就会比较明确。如果要以作业系统的限制来决定储存引擎的话,你可以参考下列的作法:
* 使用“MyISAM”储存引擎可以避免违反档案大小的限制
* 使用“InnoDB”储存引擎可以避免违反档案数量的限制
* 如果在档案数量与大小的限制都遇到问题的话,你只好增加硬件和修改作业系统在档案系统上的设定
# 2 字段资料型态
在建立表格时,你会帮每一个字段指定适合的“资料型态、data type”。正确的选择字段资料型态,除了可以帮你储存正确的资料外,还可以让数据库使用最少的内存与储存空间,这样会让数据库运作的效率更好一些。资料型态主要分为下列三大类:
* 数值:任何包含正、负号的整数与小数资料;另外还有位元(bit)的数值资料,它使用二进制来表示一个数字。
* 字串:包含non-binary与binary两种字串值,non-binary字串值是一些使用字符集与collation的字符(character)组合起来的;binary字串值是一些字节(bytes)组合的资料。
* 日期与时间:包含日期、时间与日期加时间。
## 2.1 数值
数值资料分为整数与小数资料,下列是MySQL提供的整数型态:
| 型态 | **Byte(s)** | **默认长度** | **有号数范围** | **无号数范围** |
| --- | --- | --- | --- | --- |
| TINYINT\[(长度)\] | 1 | 4 | \-128~127 | 0~255 |
| SMALLINT\[(长度)\] | 2 | 6 | \-32768~32767 | 0~65535 |
| MEDIUMINT\[(长度)\] | 3 | 9 | \-8388608~8388607 | 0~16777215 |
| INT\[(长度)\] | 4 | 11 | \-2147683648~2147683647 | 0~4294967295 |
| BIGINT\[(长度)\] | 8 | 20 | \-9223372036854775808~9223372036854775807 | 0~18446744073709551615 |
整数型态的意思就是它们不能储存小数,在建立表格的时候,如果需要一个可以储存整数资料的字段,你可以依照整数资料的大小需求,选择一个够用又不会太浪费空间的整数形态。以下列的“cmdev.integertable”表格来说:
| **字段名称** | **型态** | **范围** |
| --- | --- | --- |
| n | TINYINT(4) | \-128~127 |
| n2 | SMALLINT(6) | \-32768~32767 |
| n3 | MEDIUMINT(9) | \-8388608~8388607 |
| n4 | INT(11) | \-2147683648~2147683647 |
| n5 | BIGINT(20) | \-9223372036854775808~9223372036854775807 |
整数型态的后面会在左右刮号中指定一个数字,以“SMALLING”型态来说:
[](http://box.kancloud.cn/2015-09-15_55f7e8672f909.png)
当你在执行资料的新增或修改的时候,就要特别注意它们的可以储存数字的范围:
[](http://box.kancloud.cn/2015-09-15_55f7e87690ade.png)
整数型态的字段,就表示它们不可以储存小数的数值:
[](http://box.kancloud.cn/2015-09-15_55f7e87bcd8fa.png)
数值型态还有下列几种可以储存小数资料的浮点数型态:
| **型态** | **Byte(s)** | **默认长度** | **最大长度** | **说明** |
| --- | --- | --- | --- | --- |
| FLOAT\[(长度,小数位数)\] | 4 | 注1 | 255, 30 | 单精确度浮点数(近似值) |
| DOUBLE\[(长度,小数位数)\] | 8 | | 255, 30 | 双精确度浮点数(近似值) |
| DECIMAL\[(长度\[,小数位数\])\] | 注2 | 10, 0 | 65, 30 | 自行指定位数的精确值 |
注1:FLOAT与DOUBLE的默认长度会因为不同的作业系统而有不一样的长度
注2:依照指定的位数决定实际储存的空间
“FLOAT”和“DOUBLE”型态的字段可以用来储存包含小数的数值,储存空间分别是4和8个字节,它们是一种占用储存空间比较小,执行运算比较快的型态。不过因为它们是使用“近似值”来储存你的数值,所以如果你需要储存完全精准的数值,就不能使用这两种型态。
另外一种可以储存小数数值的“DECIMAL”型态就可以用来储存完全精准的数值,储存在这个型态中的数值,不论是查询或是运算,都不会有任何误差,不过“DECIMAL”型态占用的储存空间就比“FLOAT”和“DOUBLE”型态大。“DECIMAL”型态在MySQL还有一个一样的关键字是“NUMERIC”,这两种型态完全一样。
在MySQL中,“FLOAT”、“DOUBLE”和“DECIMAL”都可以依照自己的需要设定长度与位数:
[](http://box.kancloud.cn/2015-09-15_55f7e87f4b8c2.png)
在设定长度与小数位数的时候,要注意下列几个规则:
* 不可以超过最大长度
* 小数位数不可以超过长度
* 长度与小数位数一样的时候,表示只可以储存小数,例如“0.123”
MySQL的数值型态,包含整数与浮点数都可以设定为“只能储存正数”,以下列的“cmdev.numerictable”表格来说:
| **字段名称** | **型态** |
| --- | --- |
| i | TINYINT(3) UNSIGNED |
| i2 | SMALLINT(5) UNSIGNED |
| i3 | MEDIUMINT(8) UNSIGNED |
| i4 | INT(10) |
| i5 | BIGINT(20) UNSIGNED |
| f | FLOAT UNSIGNED |
| f2 | DOUBLE |
| f3 | DECIMAL(10, 0) UNSIGNED |
设定为只能储存正数的字段,就跟字面上的效果一样,任何希望储存负数的动作都会造成错误:
[](http://box.kancloud.cn/2015-09-15_55f7e87fc3351.png)
MySQL的数值型态都可以依照自己的需要设定长度,以下列的“cmdev.numerictable2”表格来说:
| **字段名称** | **型态** |
| --- | --- |
| i | TINYINT(3) |
| i2 | SMALLINT(3) |
| i3 | MEDIUMINT(3) |
| i4 | INT(3) |
| i5 | BIGINT(3) |
| f | FLOAT(5, 2) |
| f2 | DOUBLE(5, 2) |
| f3 | DECIMAL(5, 2) |
同样为数值型态设定长度,在整数和浮点数会有不一样的效果。如果你为整数型态的字段设定长度的话,这个长度只是设定显示的长度而已,并不会影响实际储存的长度:
[](http://box.kancloud.cn/2015-09-15_55f7e8852e81a.png)
为浮点数型态设定长度与小数位数的时候,效果就跟整数型态不一样了:
[](http://box.kancloud.cn/2015-09-15_55f7e88faf65b.png)
不过在整数位数的部份,就一定会依照设定来储存,否则会造成错误:
[](http://box.kancloud.cn/2015-09-15_55f7e8901949e.png)
MySQL的在数值型态的设定上,还有一个比较特别的设定,就是“ZEROFILL”,以下列的“cmdev.numerictable3”表格来说:
| **字段名称** | **型态** |
| --- | --- |
| i | TINYINT(3) UNSIGNED ZEROFILL |
| i2 | SMALLINT(4) UNSIGNED ZEROFILL |
| i3 | MEDIUMINT(5) UNSIGNED ZEROFILL |
| i4 | INT(6) UNSIGNED ZEROFILL |
| i5 | BIGINT(7) UNSIGNED ZEROFILL |
| f | FLOAT(5, 2) UNSIGNED ZEROFILL |
| f2 | DOUBLE(7, 3) UNSIGNED ZEROFILL |
| f3 | DECIMAL(9, 5) UNSIGNED ZEROFILL |
“ZEROFILL”的设定表示在查询这些字段的时候,回传的资料会在左侧根据长度的设定填满“0”:
[](http://box.kancloud.cn/2015-09-15_55f7e89071b74.png)
注:“ZEROFILL”一定要跟“UNSIGNED”一起使用,就算你只有为字段设定“ZEROFILL”,MySQL也会自动加入“UNSIGNED”的设定。
整数型态的部份,在补0的处理上会不太一样:
[](http://box.kancloud.cn/2015-09-15_55f7e890e8dd4.png)
## 2.2 位元
“位元、BIT”型态其实也是用来储存数值用的,不过它是以二进制的型式储存资料,也就是只有0跟1两种资料。MySQL的在数值型态的设定上,还有一个比较特别的设定,就是“ZEROFILL”,以下列的“cmdev.numerictable3”表格来说:
| **字段名称** | **型态** | **数字范围** |
| --- | --- | --- |
| n | BIT | 0~1 |
| n2 | BIT(8) | 0~255 |
| n3 | BIT(64) | 0~18446744073709551615 |
你可以直接储存数字到位元型态的字段;也可以指定一个使用二进制表示的值:
[](http://box.kancloud.cn/2015-09-15_55f7e89128f6a.png)
## 2.3 字串
MySQL把字串型态分为两大类:“非二进位制、non-binary”与“二进位制、binary”。非二进位制就是储存一般文字的字串,会有特定的字符集与collation;二进位制使用字节储存资料,不包含字符集与collation,所以大多用来储存图片或音乐这类资料。“非二进位制、non-binary”的字串型态有下列几种:
| **型态** | **最大长度** | **实际储存的空间** | **说明** |
| --- | --- | --- | --- |
| CHAR\[(长度)\] | 255 | 指定的长度 | 固定长度的字串,默认长度为1 |
| VARCHAR(长度) | 65535 | 字符个数加1或2bytes | 变动长度的字串 |
| TINYTEXT | 255 | 字符个数加1byte | |
| TEXT | 65535 | 字符个数加2bytes | |
| MEDIUMTEXT | 16,772,215 | 字符个数加3bytes | |
| LONGTEXT | 4,294,967,295 | 字符个数加4bytes | |
固定长度与变动长度的两种字串型态都可以储存字串,差异在储存的文字个数小于型态指定的长度时,变动长度实际储存的空间会小一些,以下列的“cmdev.nonbinarytable”表格来说:
| **字段名称** | **型态** |
| --- | --- |
| s | CHAR(10) |
| s2 | VARCHAR(10) |
同样把长度设定为10的“CHAR”与“VARCHAR”字串型态,它们在储存字串资料的时候会不太一样:
[](http://box.kancloud.cn/2015-09-15_55f7e8a069968.png)
“非二进位制、non-binary”的字串都会包含特定的字符集与collation,所以可以用来储存各种不同国家的文字。不同的字符集会占用不同的储存空间,以下列的“cmdev.nonbinarytable2”表格来说:
| **字段名称** | **型态** | **字符集** |
| --- | --- | --- |
| s | VARCHAR(6) | latin1 |
| s2 | VARCHAR(6) | big5 |
| s3 | VARCHAR(6) | utf8 |
上列的表格中,三个字段分别设定为“latin1”、“big5”与“utf8”字符集,你可以查询MySQL数据库支援的字符集特性,“MAXLEN”字段是关于储存空间的资讯:
[](http://box.kancloud.cn/2015-09-15_55f7e8a0acfcc.png)
使用在“LENGTH”函式来查询储存在这个表格中的字串资料,就可以很明显的看出不同的字符集,在储存字符时使用的储存空间:
[](http://box.kancloud.cn/2015-09-15_55f7e8a5e85ec.png)
“LENGTH”函式会传回字串资料实际的储存长度(byte);如果你要查询字串的字符数量的话,就要使用“CHAR\_LENGTH”函式:
[](http://box.kancloud.cn/2015-09-15_55f7e8ab3414c.png)
字符集会影响字串的储存空间,collation会影响字串排列顺序。以下列的“cmdev.nonbinarytable3”表格来说:
| 字段名称 | 型态 | 字符集 | Collation |
| --- | --- | --- | --- |
| s | VARCHAR(6) | latin1 | latin1\_general\_ci |
| s2 | VARCHAR(6) | latin1 | latin1\_general\_cs |
上列表格中字段的字符集都指定为“latin1”,不过“s”字段的collation设定为“latin1\_general\_ci”,表示排序时不区分大小写;“s2”字段设定为“latin1\_general\_cs”,表示排序时会区分大小写。以下列储存在这个表格中纪录来说:
[](http://box.kancloud.cn/2015-09-15_55f7e8ad2576a.png)
Collation设定中的“latin1\_general\_ci”,最后的“ci”表示“case insensitive”,是不分大小写的意思。在这样的设定下,MySQL会把字串“ABC”和“abc”当成是一样的;“latin1\_general\_cs”,最后的“cs”表示“case sensitive”,是区分大小写的意思。在这样的设定下,MySQL就会把字串“ABC”和“abc”当成是不一样的字串。
是否区分大小写的collation设定会影响排序的结果:
[](http://box.kancloud.cn/2015-09-15_55f7e8b34aa3e.png)
另外一个影响是条件的判断:
[](http://box.kancloud.cn/2015-09-15_55f7e8b3d6f67.png)
“二进位制、binary”的字串型态是使用字节(byte)为单位来储存字串资料,跟非二进位制的字串类似,它也提供许多应用在不同长度的型态:
| 型态 | 最大长度(byte) | 实际储存的空间(byte) | 说明 |
| --- | --- | --- | --- |
| BINARY\[(长度)\] | 255 | 指定的长度 | 固定长度的字串,默认长度为1 |
| VARBINARY(长度) | 65535 | 长度加1或2bytes | 变动长度的字串 |
| TINYBLOB | 255 | byte数加1byte | |
| BLOB | 65535 | byte数加2bytes | |
| MEDIUMBLOB | 16,772,215 | byte数加3bytes | |
| LONGBLOB | 4,294,967,295 | byte数加4bytes | |
“BINARY”与“VARBINARY”两种型态的差异,与“CHAR”和“VARCHAR”的差异一样。在一般的情况下,使用“VARBINARY”会比“BINARY”节省一点储存空间。你也可以使用“二进位制、binary”型态储存文字资料,只不过MySQL都是以字节来储存所有的资料,也就是0到255的数字:
[](http://box.kancloud.cn/2015-09-15_55f7e8b45c6d1.png)
所有“二进位制、binary”的字串型态都不可以指定字符集与collation,不过你可以使用它们来储存任何语言的文字,也可以储存类似音乐或图片资料,因为MySQL都是一个一个byte的把资料储存到数据库中;所以在执行查询时的排序和条件设定,都是以使用字节为单位来判断。
## 2.4 列举与集合
列举(ENUM)与集合(SET)是一种特殊的“非二进位制、non-binary”字串型态,所以它们也可以指定字符集与collation。下列是这两种型态的说明:
| 型态 | 最大个数 | 储存空间 | 说明 |
| --- | --- | --- | --- |
| ENUM(字串值\[,...\]) | 65535 | 1byte(255个)2bytes(256到65535个) | 包含一组合法的字串值(单一值) |
| SET(字串值\[,...\]) | 64 | 1byte(8个)2bytes(16个)3bytes(24个)4bytes(32个)8bytes(64个) | 包含一组合法的字串值(多个值) |
列举(enumeration)的资料在数据库中的应用很常见,例如服装的大小就会以S、M与L来表示小、中与大。你可以使用字串来储存这类资料,不过这类的资料也很适合使用“ENUM”型态来储存。以下列的“cmdev.enumtable”表格来说:
[](http://box.kancloud.cn/2015-09-15_55f7e8b9a33df.png)
在储存资料的时候,“ENUM”型态看起来似乎与“VARCHAR”完全一样:
[](http://box.kancloud.cn/2015-09-15_55f7e8b9dc896.png)
可是列举型态在资料的正确性方面,就会比单纯的字串型态好多了。例如下列错误示范:
[](http://box.kancloud.cn/2015-09-15_55f7e8ba60a67.png)
列举型态字段除了可以直接使用字串值来新增与更新资料外,还可以使用数值资料的编号来代替,任何一个列举型态中的成员,MySQL都会帮它们编一个号码:
[](http://box.kancloud.cn/2015-09-15_55f7e8bacd743.png)
了解列举型态中成员的编号以后,你可以选择字串值或数值来管理列举型态字段储存的资料:
[](http://box.kancloud.cn/2015-09-15_55f7e8bb32038.png)
虽然在查询列举型态字段资料的时候,所得到的结果都是成员的字串值;不过真正储存在数据库中的资料却是成员的编号,所以指定列举型态字段为排序字段的时候,数据库会使用编号来排序,而不是以成员的字串值:
[](http://box.kancloud.cn/2015-09-15_55f7e8bbb8ba4.png)
在指定列举型态字段的查询条件时,可以使用成员的字串值或编号:
[](http://box.kancloud.cn/2015-09-15_55f7e8bc66f72.png)
集合(SET)型态同样可以设定一组成员,不过它可以储存多个成员资料。例如星期的成员总共有七个,而需要工作的星期就会有一个以上了,类似这样的需求就应该使用集合型态。以下列的“cmdev.settable”表格来说:
| 字段名称 | 型态 |
| --- | --- |
| workingday | SET(‘MON’,'TUE’,'WED’,'THU’,'FRI’,'SAT’,'SUN’) |
你可以使用一个字串值来管理集合型态字段,在这个字串值中,使用逗号来隔开不同的成员字串:
[](http://box.kancloud.cn/2015-09-15_55f7e8bca5c85.png)
集合型态字段与列举型态字段同样具有检查资料是否正确的能力:
[](http://box.kancloud.cn/2015-09-15_55f7e8bd09eff.png)
列举型态字段的成员编号使用简单的连续数字;集合型态字段会比较复杂一些:
[](http://box.kancloud.cn/2015-09-15_55f7e8bd50a06.png)
了解集合型态字段的成员所代表的数字后,你就可以使用数值来管理储存的资料:
[](http://box.kancloud.cn/2015-09-15_55f7e8c2911c4.png)
要使用数值来代表多个成员的时候,你只要把所有成员的数字加总起来就可以了:
[](http://box.kancloud.cn/2015-09-15_55f7e8c7d130b.png)
列举与集合型态都可以设定需要的字符集与collation,以下列的“cmdev.estable”表格来说:
| 字段名称 | 型态 | 字符集 | Collation |
| --- | --- | --- | --- |
| enumsize | enum(‘XS’, …) | latin1 | latin1\_general\_ci |
| enumsize2 | enum(‘XS’, …) | latin1 | latin1\_general\_cs |
| workingday | set(‘MON’, …) | latin1 | latin1\_general\_ci |
| workingday2 | set(‘MON’, …) | latin1 | latin1\_general\_cs |
字符集的设定可以决定可以储存字串资料的编码,而collation的设定会决定字串值是否区分大小写:
[](http://box.kancloud.cn/2015-09-15_55f7e8cd613d7.png)
如果指定字串值的时候违反collation设定的大小写规则,就会发生错误:
[](http://box.kancloud.cn/2015-09-15_55f7e8cdbe9b5.png)
## 2.5 日期与时间
MySQL提供下列几个可以储存日期与时间资料的字段型态:
| 型态 | Byte(s) | 说明 | 范围 |
| --- | --- | --- | --- |
| DATE | 3 | 日期 | ’1000-01-01′~’9999-12-31′ |
| TIME | 3 | 时间 | ‘-838:59:59′~’838:59:59′ |
| DATETIME | 8 | 日期与时间 | ’1000-01-01 00:00:00′~’9999-12-31 23:59:59′ |
| YEAR\[(4 | 2)\] | 1 | 西元年 |
| TIMESTAMP | 4 | 日期与时间 | ’1970-01-01 00:00:00′~2037 |
日期(DATE)型态字段可以储存年、月、日的资料,范围从“1000-01-01”到“9999-12-31”,你的日期资料不可以超过“9999-12-31”,可是你可以储存“1000-01-01”以前的日期,不过MySQL建议你最好不要这么作,不然可能会造成一些奇怪的问题。
因为日期中的西元年份可以使用四个或两个数字,使用两个数字的时候,“70”到“99”表示“1970”到“1999”;如果是“00”到“69”就是“2000”到“2069”。所以要注意下列的情况:
[](http://box.kancloud.cn/2015-09-15_55f7e8ce3886d.png)
另一个日期资料会变成这样:
[](http://box.kancloud.cn/2015-09-15_55f7e8ce7b922.png)
时间(TIME)型态可以储存时、分、秒的资料,范围从“-838:59:59”到“838:59:59”。这个储存时间资料的范围可能会跟你想的不太一样。一般来说,时间资料指的是从“00:00:00”到“23:59:59”,也就是一天的时间。MySQL的时间型态字段可以让你储存类似“经过的时间”这样的资料:
[](http://box.kancloud.cn/2015-09-15_55f7e8ceceb94.png)
在指定一个时间资料的时候,你可以省略秒或分,省略的部份,MySQL都会帮你设定为“0”:
[](http://box.kancloud.cn/2015-09-15_55f7e8cf38f61.png)
日期与时间(DATETIME)型态可以储存完整的年、月、日与时、分、秒资料,范围从“1000-01-01 00:00:00”到“9999-12-31 23:59:59”。在表示一个日期与时间资料的时候,日期与时间之间,至少要使用一个空白隔开。时间部份的时、分、秒都可以省略,省略的部份,MySQL都会帮你设定为“0”:
[](http://box.kancloud.cn/2015-09-15_55f7e8d4b276a.png)
如果只需要储存年份资料的话,你可以使用西元年(YEAR)型态,这样会节省很多储存空间。你可以视需要把西元年型态设定为两位或四位数字,四位数字可以储存的范围从“1901”到“2155”;两位数字的范围从“00”到“99”,实际的西元年份是“1970”到“2069”。
在指定一个年份资料给西元年型态字段的时候,可以使用字串值或数值来表示西元年份,不同个数的资料会有不同的储存效果:
[](http://box.kancloud.cn/2015-09-15_55f7e8d6ec46d.png)
如果西元年型态字段的值是“0”的话,MySQL会把它当成是一个不正确的西元年资料,所以你应该不会指定这样的资料,不过指定不同的资料也会有不同的储存结果:
[](http://box.kancloud.cn/2015-09-15_55f7e8d77067e.png)
“TIMESTAMP”型态的格式与“DATETIME”一样,都包含完整的年、月、日与时、分、秒资料,不过它使用的储存空间只有4bytes,是“DATETIME”型态的一半。
“TIMESTAMP”也是MySQL日期与时间型态中具有“时区”特性的型态。它可以储存从“1970-01-01 00:00:00”到目前经过的秒数。这个起始日期与时间使用“Coordinated Universal Time、UTC”世界标准时间为储存资料的依据,它与“Greenwich Mean Time、GMT”格林威治标准时间是一样的。
全世界分为许多不同时区(time zone),所有时区都使用跟标准时间的差异来当作自己的标准时间。以台湾来说,你会在安装Windows平台的电脑中,经由控制台里的日期和时间,看到这个关于时区的设定:
[](http://box.kancloud.cn/2015-09-15_55f7e8d7b38c8.png)
MySQL数据库采用与作业系统同样的时区设定,所以在储存“TIMESTAMP”型态字段的资料时,过程中会有一些计算的动作:
[](http://box.kancloud.cn/2015-09-15_55f7e8d85bd2e.png)
而查询“TIMESTAMP”型态字段资料的时候,也会有这样的情况:
[](http://box.kancloud.cn/2015-09-15_55f7e8d8e805a.png)
了解时区设定与“TIMESTAMP”型态的关系后,你就可以知道下列的动作为什么会发生错误了:
[](http://box.kancloud.cn/2015-09-15_55f7e8d9325e0.png)
你可以使用查询叙述取得MySQL数据库服务器关于时区的设定:
[](http://box.kancloud.cn/2015-09-15_55f7e8d975d39.png)
如果想要设定其它的时区,可以使用“+时时:分分”或“-时时:分分”的格式。例如日本东京时区比格林威治标准时间晚九小时,你可以设定为“+09:00”;而美国旧金山比格林威治标准时间早七小时,可以设定为“-07:00”:
[](http://box.kancloud.cn/2015-09-15_55f7e8df060b6.png)
设定新的时区以后,使用下列的范例测试“DATETIME”和“TIMESTAMP”两种型态,可以看出在储存日期时间资料上的差异:
[](http://box.kancloud.cn/2015-09-15_55f7e8df64430.png)
因为“TIMESTAMP”型态储存的是格林威治标准时间,所以在修改时区后,查询得到的日期时间资料就会有差异了:
[](http://box.kancloud.cn/2015-09-15_55f7e8dfe0aab.png)
- 空白目录
- 常用功能
- PHP中常用的header头部定义
- 压缩包下载1
- 压缩包下载2
- 文件下载
- php常用加密函数总结
- url请求参数加解密
- PHP操作大全
- 指定月份的第某个月
- PHP 数组和字符串互相转换实现方法
- php字符串截取的简单方法
- php 根据子分类循环获取其父级分类
- PHP文件操作功能函数大全
- PHP常用到的功能函数
- 自定义php常用函数110个
- 自定义PHP常用功能函数
- 开发中常用自定义小功能函数
- PHP判断远程文件是否存在
- PHP写文件函数
- PHP生成GUID的函数
- PHP常用正则表达式汇总
- php字符串压缩
- PHP无限分组
- PHP简单 对象(object) 与 数组(array) 的转换
- PHP数组常用函数
- PHP调式测试函数
- PHP常用字符串的操作函数
- mysql 常用内置函数
- PHP通用请求函数CURL封装
- 裁剪图片PHP代码
- PDO操作MYSQL封装类
- 10个实用的PHP代码片段
- 获取访问者IP地址
- PHP实现发红包程序
- PHP把文本转换成图片
- curl重写php file_get_contents
- PHP生成一个随机字符串
- PHP读文件和写文件
- PHP根据key 给二维数组分组
- php中curl模拟post提交多维数组
- 33个超级有用必须要收藏的PHP代码样例
- PHP防XSS 防SQL注入的代码
- php常用数组array函数实例总结
- 用PHP遍历目录下的全部文件
- GBK2UTF8
- php函数类库
- 一、php一些常用的校验
- 1.1、校验是否为空(null/空串)1
- 1.2、校验是否为纯数字1
- 1.3、校验是否为纯数字(正则)1
- 1.4、检验手机号1
- 1.5、校验邮箱格式1
- 1.6、检查密码长度是否符合规定1
- 二、手机类型访问判断
- 三、字符集文件转换
- 3.1、utf8转gbk
- 3.2、gbk转utf8
- 3.3、繁体转简体
- 3.4、简体转繁体
- 3.5、unicode转utf8
- 3.6、utf8转unicode
- 3.7、Ascii转拼音
- 3.8、gbk转拼音
- 3.9、数组 utf8转gbk
- 3.10、数组 gbk转utf8
- 3.11、json 处理gbk转码utf-8问题( json_encode转换数组,值为null)
- 3.12、Unicode解码
- 四、文档目录操作
- 4.1、转化 \ 为 /
- 4.2、创建目录
- 4.3、拷贝目录及下面所有文件
- 4.4、转换目录下面的所有文件编码格式
- 4.5、列出目录下所有文件
- 4.6、设置目录下面的所有文件的访问和修改时间
- 4.7、目录列表
- 4.8、删除目录及目录下面的所有文件
- 4.9、取得文件扩展
- 4.10、查询字符是否存在于某字符串
- 4.11、获取文件目录列表
- 4.12、删除一个路径下的所有文件夹和文件的方法
- 4.13、文件下载
- 五、session与cookie
- 5.1、设置session
- 5.2、读取session
- 5.3、清除session
- 六、CURL操作
- 6.1、发起get请求
- 6.2、发起post请求
- 6.3、curl获取跳转后的网址的url
- 6.4、curl判断远程图片是否加防盗链
- 6.5、curl获取301页面的内容
- 6.6、curl判断文件是否存在(404)
- 6.7、php的curl封装类
- 七、日期、时间与字节转换
- 7.1、转换字节数为其他单位(Gb、Mb等)
- 7.2、时间转换(将秒转换为时间)
- 7.3、将秒转换成 天-时分秒
- 7.4、时间转换(将时分秒转换为秒)
- 7.5、计算两个时间相差的天
- 7.6、获取文件大小并格式化
- 7.7、返回13位时间戳
- 7.8、返回与当前时间的差距,如1分钟前,2小时前,5月前等
- 7.8、PHP中DateTime的常用方法
- 八、对象、数组、字符串、转义等
- 8.1、将数组转换为对象
- 8.2、将对象转换为数组
- 8.3、将字符串转换为数组
- 8.4、将数组转换为字符串
- 8.5、将文本格式成适合js输出的字符串
- 8.6、返回经addslashes(转义)处理过的字符串或数组
- 8.7、返回经stripslashes(删除反斜杠)处理过的字符串或数组
- 8.8、返回经htmlspecialchars(字符转html)处理过的字符串或数组
- 8.9、安全过滤函数
- 8.10、xss过滤函数
- 8.11、过滤ASCII码从0-28的控制字符
- 8.12、格式化文本域内容
- 8.13、将文本格式成适合js输出的字符串
- 8.14、转义 javascript 代码标记
- 8.15、数组转码
- 8.16、php用逗号格式化数字
- 8.17、数组去重
- 8.18、字符串去重
- 8.19、数组排序
- 九、加密扩展
- 9.1、简单的字符串加密、解密函数
- 9.2、简单的加密解密类
- 9.3、简单对称加密算法2
- 9.4、常用对称加密算法(DES/AES)类
- 9.5、3des加密解密类-三重数据加密算法
- 十、随机数、获取请求ip等
- 10.1、产生随机字符串
- 10.2、获取请求ip
- 10.3、生成一定范围内的随机数字
- 10.4、生成不重复的随机数
- 10.5、生成一定数量的随机数,并且不重复
- 10.6、生成32位随机数
- 10.7、生成9位随机数字(可以做qq用)
- 十一、其他
- 11.1、php对html页面压缩函数
- 11.2、构建层级(树状)数组、
- 11.3、获取内容中的图片
- 11.4、生成sql语句,如果传入$in_cloumn 生成格式为 IN('a', 'b', 'c')
- 11.5、打印各种类型的数据,调试程序时使用。
- 11.6、URL重定向
- 11.7、替换html代码里的所有图片的url,新增url
- 11.8、去除html里的p标签
- 11.9、去除字符串中所有html代码(格式化代码html)
- 11.10、将number_format的输出转换为php数字
- 11.7、内容里批量替换图片的url地址为自己的地址
- 十二、类库
- 1、php 5.6.3PHP封装的数据库模型Model类完整示例【基于PDO】
- 2、Curl类库
- 3、php PDO数据库类库
- 4、获取网站title
- 字符串配置转数组
- 数组助手类1
- 获取随机字符串
- 获取头像存储路径
- 单位转换函数
- 获取字符串长度
- 获取中文字符拼音首字母
- 获取当前页面URL地址
- 获取n天前的时间戳
- 获取n天前0点的时间戳
- 获取ip地址所在的区域
- 邮箱验证
- PHP常用函数总结(160多个)
- PHP判断输入数据是否合法常用的类
- 无限极分类
- php ajax实现分页功能
- 代码
- html
- sendAjax.js
- data.js
- page.js
- page.css
- php基础
- 字符串
- 字符串1
- 字符串常用函数
- 数组
- 数组简介
- 数组的定义
- 数组的操作
- 1 数组的计算
- 2 for循环遍历索引数组
- 3 foreach遍历关联数组
- 4 list、each函数遍历数组
- 5 常用操作数组函数
- 数组的常用函数
- 时间
- PHP的日期和时间
- 1 获取时期时间信息函数
- 2 日期验证函数
- 3 获取本地化时间戳函数
- 4 程序执行时间检测
- 文件操作
- 文件处理系统
- 1 读取文件
- 2 创建和修改文件内容
- 3 创建临时文件
- 4 移动、拷贝和删除文件
- 5 检测文件属性函数
- 6 文件常用函数和常量
- 7 文件锁处机制
- 8 目录处理函数
- 9 文件权限设置
- 10文件路径函数
- 11 小小文件留言本
- 12 修改配置文件的实例
- 流程控制
- 流程控制结构
- if条件结构流程
- 1 if语句
- 2 嵌套if...else...elseif结构
- 3 if语句多种嵌套
- 分支结构switch语句的使用
- 循环语句的使用
- 1 while循环
- 2 do...while循环的区别
- 3 for循环控制语句
- 4 goto语法
- 5 declare 语法
- 函数
- PHP函数
- 自定义函数
- 自定义函数高级调用
- 1 回调函数
- 2 变量函数
- 3 匿名函数
- 4 内部函数
- 5 变量作用域
- 6 参数的引用
- 7 递归函数
- 8 静态变量
- 使用系统内置函数
- 文件包含函数
- 数学常用函数
- 正则
- PHP正则表达式
- 1 正则表达示的定界符
- 2 正则表达示中的原子
- 3 正则表示中的元字符
- 4 正则达达示中的模式修正符
- 5 写正则的诀窍和常用正则
- 6 用正则写一个UBB文本编辑器
- 常用正则
- 错误处理
- 1 禁止显示错误
- 2 错误报告级别
- 3 错误记录日志
- 4 自定义错误处理函数
- 错误及异常处理机制、错误日志
- 过滤器
- 表达式
- PHP基本语法
- PHP基本语法(一)
- PHP基本语法(二)
- GD库图像处理
- 文件上传和下载
- PHP文件上传
- 1 文件上传需要注意php.ini文件
- 2 文件上传的步骤
- 3 文件上传表单注意事项
- 4 按照数组和步骤完成文件上传
- 5 多文件上传
- 6 文件上传进度处理
- PHP图像处理
- 1 学习前的准备工作
- 2 用图片处理函数画一张图
- 3 生成验证码
- 4 图像缩放和裁剪技术
- 5 图片水印处理
- 常量和变量
- 1 用常量限制用户跳过某些文件
- .2 可变变量
- 3 外部变量
- 4 环境变量
- 5 变量引用
- PHP表达式与运算符
- 1 算术运算
- 2 赋值运算
- 3 自加、自减运算
- 4 比较运算
- 5 逻辑运算
- 6 位运算
- 7 运算符优先级
- 8 三元运算符和其它运算符
- 会话管理和控制
- 1 Cookie概述
- 2PHP中的Cookie
- 3 session概述
- 4 PHP中使用session
- 5 SESSION应用实例
- 会话技术(cookie session)
- 会话技术 session场景使用介绍!
- PHP.in中session和cookie的配置说明
- 通过cURL来做小偷程序
- 1 curl的使用步骤
- 2 自定义get方法抓取网页
- 3 使用post发送数据
- PHP基础数据类型及运算符介绍
- 数据类型
- 1 整型就是整数
- 2 布尔就是易经的知识
- 3 字符串
- 4 浮点型
- 5 重要:if和else语法
- 6 NULL类型
- 7对象以后会学
- 8 数组会有单纯的一个章节
- 9 资源类型
- 10 眼前了解回调类型即可
- 11 查看和判断数据类型
- 12 数据类型的自动转换和强制转换
- PHP版本
- php自动加载
- xml的介绍
- openssl的介绍
- php文件管理
- 数据库Mysql
- 数据库之MySQL(概述)
- PHP数据库编程
- 数据库编程(2)
- SQL常见的可优化点
- Mysql设计与优化专题
- mysql的最佳索引攻略
- 详解慢查询
- ER图,数据建模与数据字典
- 数据中设计中的范式与反范式
- 字段类型与合理的选择字段类型
- 表的垂直拆分和水平拆分
- 21分钟 MySQL 入门教程
- 一、MySQL的相关概念介绍
- 二、Windows下MySQL的配置
- 三、MySQL脚本的基本组成
- 四、MySQL中的数据类型
- 五、使用MySQL数据库
- 六、操作MySQL数据库
- 七、创建后的修改
- 八、附录
- 3天入门MySQL
- 前言1
- 01. 数据库的用途和概念
- 02. 娱乐化讲解表关系
- 03. mysql 数据库安装
- 04. 数据语句操作类型
- 05. 连接数据库
- 06. 数据库结构定义语句
- 6.2 数据表操作
- 6.1 数据库操作
- 6.3 数据字段操作
- 07. 类型、字符集、引擎和索引
- 7.1 数据类型
- 7.2 字符集
- 7.3 表引擎
- 7.4 索引
- 08. 增删改查
- 12.8.1 插入记录
- 12.8.2 查询记录
- 12.8.3 多表联合查询
- 12.8.4 更新记录
- 12.8.5 删除记录
- 09. DCL语句
- 10. 常用工具简介
- 附录1 . 学习MySQL常用的英文单词
- MySQL 超新手入门
- (1) 重新开始
- (2) 数据库概论和 MySQL 安装
- (3) SELECT 基础查询
- (4) 运算式和函数
- (5) JOIN 和 UNION 查询
- (6) CRUD 和资料维护
- (7) 字符集和数据库
- (8) 存储引擎和数据类型
- (9) 表格和索引
- (10) 子查询
- (11) 视图
- (12) 预处理语句
- (13) 存储过程入门
- (14) 存储过程的变量和流程
- (15) 存储过程进阶
- (16) 触发器
- (17) 资料库资讯
- (18) 错误处理和查询
- (19) 导入和导出数据
- (20) 性能
- php常用类
- 面向对象
- 面向对象(OOP)编程完全教程
- 1.什么是面向对象
- 2.什么是类,什么是对象,类和对象这间的关系
- 3.什么是面向对象编程呢
- 4.如何抽象出一个类
- 5.如何实例化对象
- 6.如何去使用对象中的成员
- 7.特殊的引用this的使用
- 8.构造方法__construct()与析构方法__destruct()
- 9.封装性(var与public,protected,private的关系)
- 10.__set(),__get(),__isset(),__unset()四个方法的应用
- 11.类的继承
- 12.重载新的方法(parent::)
- 13.访问类型(public,protected,private)
- 14.final关键字的应用
- 15.static和const关键字的使用(self::)
- 16.__toString()方法
- 17.克隆对象__clone()方法
- 18.__call()处理调用错误
- 19.抽象方法和抽象类(abstract)
- 20.PHP5接口技术(interface)
- 21.多态的应用
- 22.把对象串行化serialize()方法,__sleep()方法,__wakeup()方法
- 23.自动加载类 __autoload()函数
- PHPer进阶
- 单例模式
- 工厂方法模式
- 适配器模式
- 建造者模式(通过选择mysql,mongo数据库链接类型做说明)
- 委托模式
- 对象基础实践
- 深入了解面向对象高级特性
- 抽象类和接口类的实际作用
- PHP解决问题进化论(整理笔记)
- PHP7新特性整理介绍篇
- php-fpm 与 Nginx优化总结
- Centos+Nginx+PHP7.0编译安装(和PHP5.6老版本共存)
- PHP7:Mongodb API使用
- PHP之include/require深入了解
- PHP内核了解:生命周期及运行模式
- 面向对象总结
- 基础概念
- 什么是类
- 什么是对象
- 静态属性
- 三大特征
- 封装
- 继承
- 多态
- 9个常用的魔术方法
- __construct
- __destruct
- __call
- __get
- __set
- __sleep
- __toString
- __clone
- __autoload
- 抽象类
- 对象接口
- 面向对象设计模式
- 前言
- (一),单例模式
- (二),Builder模式
- (三),原型模式
- (四),工厂方法模式
- (五),策略模式
- (六),状态模式
- (七),观察者模式
- (八),责任链模式
- (九),适配器模式
- (十),代理模式
- (十一),装饰模式
- (十二),外观模式
- (十三),解释器模式
- PHP开发第一步,PHP5.6 + MySQL5.5 + Apache2.4环境搭建
- 面向对象1
- 类和对象
- 面向对象高级
- php编程总结
- PHP学习笔记
- MySQL学习笔记
- php基础知识
- javascript
- javascript DOM总结
- JavaScript (JS) 函数补充 (含arguments、eval()、四种调用模式)
- JavaScript (JS) 面向对象编程 浅析 (含对象、函数原型链、闭包解析)
- JavaScript (JS)基础:BOM 浅析 (含window对象相关基本方法、属性解析)
- JavaScript (JS)基础:DOM 浅析 (含数组Array、字符串String基本方法解析)
- JavaScript (JS)基础:ECMAScript 浅析 (含Math基本方法解析)
- js功能函数
- 一、js一些常用的校验
- 1.1、校验是否为空(null/空串)
- 1.2、校验是否为纯数字
- 1.3、校验是否为纯数字(正则)
- 1.4、检验手机号
- 1.5、验证座机号
- 1.6、校验ip
- 1.7、检验url地址
- 1.8、检验身份证
- 1.9、检验邮箱
- 1.10、检验日期
- 1.11、检验金额
- 1.12、检验否是汉字
- 1.13、校验数字的表达式
- 1.14、校验字符的表达式
- 1.15、特殊需求表达式
- 1.16、检测密码强度
- 二、手机类型判断
- 三、返回字符串长度,汉子计数为2
- 四、获取url中的参数
- 五、js 绑定事件 适用于任何浏览器的元素绑定
- 六、获得当前浏览器JS的版本
- 七、获取当前点击事件的Object对象
- 八、字符串截取方法
- 九、JS 弹出新窗口全屏
- 十、全选/全不选
- 十一、js 判断浏览器
- 十二、JS判断两个日期大小
- 十三、移除事件
- 十四、回车提交
- 十五、JS 执行计时器
- 十六、JS 写Cookie
- 十七、JS 读Cookie
- 十八、Ajax 请求
- 十九、JS StringBuilder 用法
- 二十、JS 加载到顶部LoadJS
- 二十一、清空 LoadJS 加载到顶部的js引用
- 二十二、JS 替换非法字符
- 二十三、按Ctrl + Entert 直接提交表单
- 二十四、获取当前时间
- 二十五、Js 去掉空格方法
- 二十六、js 动态移除 head 里的 js 引用
- 二十七、整个URL 点击事件 加在URL里的onclick里
- 二十八、判断浏览器使用的是哪个 JS 版本
- 二十九、加入收藏夹
- 三十、动态加载 CSS 样式文件
- 三十一、返回脚本内容
- 三十二、清除脚本内容
- 三十三、返回按ID检索的元素对象
- 三十四、显示元素 待验证
- 三十五、与insertBefore方法(已存在)对应的insertAfter方法
- 三十六、光标停在文字的后面,文本框获得焦点时调用
- 三十七、检验URL链接是否有效
- 三十八、格式化CSS样式代码
- 三十九、压缩CSS样式代码
- 四十、 获取当前路径
- 四十一、ip 转 整型
- 四十二、整型解析为IP地址
- 四十三、删除cookies
- 四十四、判断是否以某个字符串结束
- 四十五、判断是否以某个字符串开头
- 四十六、根据样式名称检索元素对象
- 四十七、 获取移动设备初始化大小
- 四十八、 获取移动设备最大化大小
- 四十九、获取移动设备屏幕宽度
- 五十、获取页面scrollLeft
- 六十、获取页面宽度
- 六十一、获取页面scrollTop
- 六十二、获取页面可视高度
- 六十三、判断数组元素是否重复
- 六十四、生成随机数
- 六十五、数组去重
- 六十六、深度拷贝对象
- 六十七、全部替换replaceAll
- 六十八、阻止冒泡
- 六十九、返回顶部
- 七十、jsonp跨域请求
- 七十一、到某一个时间的倒计时
- 七十二、清除对象中值为空的属性
- 七十三、获取文件后缀名的方法
- 七十四、判断一个对象是不是数组类型
- 七十五、冒泡排序
- 七十六、实现一个最简单的模板引擎
- 七十七、数组最大值最小值
- 七十八、数组求和,平均值
- 七十九、从数组中随机获取元素
- 八十、返回对应元素在数组中的下标
- 八十一、返回数组(字符串)一个元素出现的次数
- 八十二、得到n1-n2下标的数组,即返回数组下标arr[n1]到数组arr[n2]的值
- 八十三、筛选数组,这里所做的就只是删除相应的数组
- 八十四、去除字符串空格
- 八十五、字母大小写切换
- 八十六、字符串循环复制,前面的要循环的字符串,后面的要循环的次数
- 八十七、字符串替换,这里的要替换的字符串必须是连续的
- 八十九、将时间戳转换成日期格式
- 九十、检验字符串是否超过某个值,超出出现省略号
- 九十一、随机码,这里的参数count必须是 2 ~ 36 之间的整数
- 九十二、查找字符串中某字符出现的次数
- 九十三、JS插入排序
- 九十四、获取前num天的日期
- 九十五、js实时计算rem,宽度大于1920px时1rem=100px
- 九十六、原生JS获取鼠标XY轴的值
- 九十七、转成XML对象
- 九十八、Js身份证验证函数
- 九十九、格式化数字串
- 一百、原生Ajax 请求
- 一百零一、两条直角边算角度
- 一百零二、禁止readonly和disabled的input退格键返回上一页
- 一百零三、生成随机字母字符串
- 一百零四、float偏移处理
- 一百零五、根据月份获取起止时间戳
- 一百零六、工具函数对象书写例子,可自己扩展
- 一百零七、js字符串压缩算法与解压
- 一百零八、指定数组元素排序(正序倒序)
- 一百零九、js所有的内置方法
- JavaScript 常用函数总结
- js常用函数整理
- JavaScript基础
- javaScript基础&DOM(一)
- javaScript基础&DOM(二)
- JavaScript语法基础1
- javascript数组对象
- javascript字符串函数
- jquery、javascript实现(get、post两种方式)跨域解决方法
- php MVC原理
- php基础知识(语法与原理)
- PHP编程经验
- 第一章 代码风格
- 第二章 代码注释
- 第三章 目录结构
- 第四章 文件管理
- 第五章 代码整理
- 第六章 路径和路由
- 第七章 实用表格
- 第八章 实用开发软件
- 第九章 技术提升心得
- 第十章 实用插件搭配
- 第十一章 常用设计模式
- PHP编码规范文档
- PHP加快执行效率的写法规范
- VUE避坑指南
- 从零开始学Vue
- Vue-cli
- PHP工具类
- 数组助手类
- 通用助手类
- 时间助手类
- 图像
- 拼音助手类
- 字符串助手类
- 验证助手类
- 时间类封装
- 数据库链式调用封装
- curl 封装 / 发送文件 / 远程下载到服务器
- php Captcha 驗證碼類
- php 替换敏感字符串
- php返回数据格式化类
- php XML文件解释类
- php CSS Update Class
- PHPMailer - PHP email transport class
- PHP 遍历文件夹及文件类及处理类
- 自动登入google play下载app report
- php click captcha 验证码类
- php 获取页面中的指定内容类
- php 支持断点续传的文件下载类
- php 缩略图生成类,支持imagemagick及gd库两种处理
- php 根据url自动生成缩略图
- php 过滤html标记属性类
- php HTTP请求类,支持GET,POST,Multipart/form-data
- php Cookies 操作类
- php 密码生成类
- php main 与 iframe 相互通讯类(同域/跨域)
- php 根据url自动生成缩略图,并处理高并发问题
- php Timer 页面运行时间监测类
- php 双向队列类
- php 导出CSV抽象类
- php zip文件内容比较类
- php 获取/设置用户访问页面语言类
- php 获取Youtube某个User所有Video信息
- php 字符编码转换类,支持ANSI、Unicode、Unicode big endian、UTF-8、UTF-8+Bom 互相转换
- php 版本处理类
- TP5
- 验证器
- 内置规则
- tp5数据库操作
- 数据添加或更新
- 静态增删改查 / 关联操作
- 日志操作
- 路由
- taglib-自制标签
- migrations 数据库迁移
- TP3.2
- 数据库操作
- 发送邮箱
- Tp6
- Redis
- 字符串 / 列表 / Hash / Set / Zet / 基数统计算法
- 队列 /订阅发布 php实例
- 事务 / bitmap 位图 / 地理位置
- 备份与恢复 / 性能测试
- 设置密码 / 模糊查询
- 性能优化
- php+redis实现高并发模拟下单、秒杀、抢购操作
- Redis 的简单介绍
- Redis 最常见的问题
- 扩展thinkphp5的redis类方法
- php for redis
- 前言11
- 字符串11
- 集合
- 有序集合
- 列表
- 哈希
- key操作
- Redis 基础教程
- 简介
- 递增
- 过期
- 列表1
- 集合1
- 可排序集合
- 哈希表
- Redis学习文档
- 序言
- 简介1
- Window 下安装
- 执行
- Linux 下安装
- 数据类型1
- String
- Hash
- List
- Set
- zset
- 区别和详解
- 命令
- Keys
- flushall
- del
- ping
- 设置密码
- 实例
- PHP+Redis 实例【一】点赞 + 热度
- Thinkphp+Redis
- 数据队列
- 字符串111
- 列表11
- 集合11
- 哈希1
- 有序集合1
- 添加redis函数助手
- 基础知识
- Redis的7个应用场景
- 深入解析Redis中常见的应用场景
- MongoDB和Redis的区别
- 相关书籍
- 函数整理
- redis知识总结
- redis学习文档
- 常用命令
- 运维常用命令
- 通用操作相关命令
- 字符串相关命令
- 链表list相关命令
- 集合set相关命令
- 有序集合相关指令
- 哈希hash
- 事务
- 订阅和发布
- rdb快照持久化
- aof日志持久化
- redis集群 主从配置
- sentinel监视
- key的设计
- Redis实践技巧
- 前言111
- 第1章 keys键操作
- 第2章 string类型
- 第3章 list类型
- 第4章 set类型
- 第5章 sort set排序类型
- 第6章 hash类型
- 第7章 redis备份
- 第8章 主从复制
- 第9章 设置密码
- 第10章 事务
- 第11章 php操作redis
- Redis常见7种使用场景(PHP实战)
- redis
- jQuery学习总结
- jquery总结2
- Git
- php微信接口开发
- php微信接口开发(卷一)
- 开发心得
- 申请微信测试号
- 打通服务器与微信之间的通信
- 接受微信发送的信息
- 回复微信发送的信息
- 微信回复单图文消息
- 微信回复多图文消息
- curl用法小测试
- 获取access_token
- 获取微信的media_id
- 微信回复图片消息
- 关注自动回复
- 微信生成自定义菜单
- 【实战】后台管理自定义菜单
- 1.页面数据提交并展示
- 2.组装一、二级菜单
- 3.完成简略自定义菜单
- 【实战】thinkphp框架开发微信接口
- 1.相关东西下载地址
- 2.配置thinkphp3.2.3
- 3.微信回复文本消息
- 4.微信获取个人基本信息
- php微信接口开发(卷二)
- 网页授权获取用户基本信息
- 1.输出回调地址
- 2.获取用户信息页面
- 3.数据写入数据库
- 用户分组接口的使用
- 1.对上节代码的优化处理
- 2.获取所有用户组
- 3.创建一个分组
- 4.查询指定用户的分组
- 群发消息的接口的使用
- 1.创建新控制器
- 2.预览群发消息接口
- 3.群发消息
- 生成带参数的二维码
- 长连接转短连接
- 微信js-SDK的引入
- 1.获取jsapi_ticket
- 2.判断当前客户端版本是否支持指定JS接口
- 图像接口的使用
- 扫一扫二维码接口
- php微信接口开发(卷三)
- 微信公众号
- 1.前提条件
- 2.微信公众平台需要做的设置
- 微信支付商户平台
- 1.操作证书
- 2.配置密钥
- 3.配置支付授权目录
- 公众号支付(Jsapi支付)
- 1.SDK与demo下载
- 2.测试DEMO
- 3.将支付接口更为真实公众号信息
- 微信商城
- 1.tp3+bootstrap使用实战
- 2.图片上传实战
- 3.商城后台实战
- 4.购买商城实战
- 5.下订单后使用微信支付
- 小程序基础
- 简介12
- 接入指南
- 开发者工具的使用
- 代码审核与发布
- 小程序申请微信认证
- 小程序申请微信支付
- 小程序绑定微信开放平台帐号
- app.json配置
- 配置demo
- pages
- window
- tabBar
- networkTimeout
- debug
- page.json
- API
- 发起网络请求
- 网络请求提交表单
- 引入
- WeUI
