安装MySQL时,有warning:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
[root@localhost mysql]# scripts/mysql_install_db --user=mysql Installing MySQL system tables...2015-08-13 14:20:09 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details). 2015-08-13 14:20:09 0 [Note] ./bin/mysqld (mysqld 5.6.26) starting as process 1934 ... 2015-08-13 14:20:09 1934 [Note] InnoDB: Using mutexes to ref count buffer pool pages 2015-08-13 14:20:09 1934 [Note] InnoDB: The InnoDB memory heap is disabled 2015-08-13 14:20:09 1934 [Note] InnoDB: Mutexes and rw_locks use InnoDB's own implementation 2015-08-13 14:20:09 1934 [Note] InnoDB: Memory barrier is not used 2015-08-13 14:20:09 1934 [Note] InnoDB: Compressed tables use zlib 1.2.3 2015-08-13 14:20:09 1934 [Note] InnoDB: Using Linux native AIO 2015-08-13 14:20:09 1934 [Note] InnoDB: Not using CPU crc32 instructions 2015-08-13 14:20:09 1934 [Note] InnoDB: Initializing buffer pool, size = 128.0M 2015-08-13 14:20:09 1934 [Note] InnoDB: Completed initialization of buffer pool 2015-08-13 14:20:10 1934 [Note] InnoDB: The first specified data file ./ibdata1 did not exist: a new database to be created! 2015-08-13 14:20:10 1934 [Note] InnoDB: Setting file ./ibdata1 size to 12 MB 2015-08-13 14:20:10 1934 [Note] InnoDB: Database physically writes the file full : wait... 2015-08-13 14:20:10 1934 [Note] InnoDB: Setting log file ./ib_logfile101 size to 48 MB 2015-08-13 14:20:11 1934 [Note] InnoDB: Setting log file ./ib_logfile1 size to 48 MB 2015-08-13 14:20:12 1934 [Note] InnoDB: Renaming log file ./ib_logfile101 to ./ib_logfile0 2015-08-13 14:20:12 1934 [Warning] InnoDB: New log files created, LSN=45781 2015-08-13 14:20:12 1934 [Note] InnoDB: Doublewrite buffer not found: creating new 2015-08-13 14:20:12 1934 [Note] InnoDB: Doublewrite buffer created 2015-08-13 14:20:12 1934 [Note] InnoDB: 128 rollback segment(s) are active. 2015-08-13 14:20:12 1934 [Warning] InnoDB: Creating foreign key constraint system tables. 2015-08-13 14:20:12 1934 [Note] InnoDB: Foreign key constraint system tables created 2015-08-13 14:20:12 1934 [Note] InnoDB: Creating tablespace and datafile system tables. 2015-08-13 14:20:12 1934 [Note] InnoDB: Tablespace and datafile system tables created. 2015-08-13 14:20:12 1934 [Note] InnoDB: Waiting for purge to start 2015-08-13 14:20:12 1934 [Note] InnoDB: 5.6.26 started; log sequence number 0 2015-08-13 14:20:14 1934 [Note] Binlog end 2015-08-13 14:20:14 1934 [Note] InnoDB: FTS optimize thread exiting. 2015-08-13 14:20:14 1934 [Note] InnoDB: Starting shutdown... 2015-08-13 14:20:16 1934 [Note] InnoDB: Shutdown completed; log sequence number 1625977 |
OK
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
Filling help tables...2015-08-13 14:20:16 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details). 2015-08-13 14:20:16 0 [Note] ./bin/mysqld (mysqld 5.6.26) starting as process 1957 ... 2015-08-13 14:20:16 1957 [Note] InnoDB: Using mutexes to ref count buffer pool pages 2015-08-13 14:20:16 1957 [Note] InnoDB: The InnoDB memory heap is disabled 2015-08-13 14:20:16 1957 [Note] InnoDB: Mutexes and rw_locks use InnoDB's own implementation 2015-08-13 14:20:16 1957 [Note] InnoDB: Memory barrier is not used 2015-08-13 14:20:16 1957 [Note] InnoDB: Compressed tables use zlib 1.2.3 2015-08-13 14:20:16 1957 [Note] InnoDB: Using Linux native AIO 2015-08-13 14:20:16 1957 [Note] InnoDB: Not using CPU crc32 instructions 2015-08-13 14:20:16 1957 [Note] InnoDB: Initializing buffer pool, size = 128.0M 2015-08-13 14:20:16 1957 [Note] InnoDB: Completed initialization of buffer pool 2015-08-13 14:20:16 1957 [Note] InnoDB: Highest supported file format is Barracuda. 2015-08-13 14:20:16 1957 [Note] InnoDB: 128 rollback segment(s) are active. 2015-08-13 14:20:16 1957 [Note] InnoDB: Waiting for purge to start 2015-08-13 14:20:16 1957 [Note] InnoDB: 5.6.26 started; log sequence number 1625977 2015-08-13 14:20:17 1957 [Note] Binlog end 2015-08-13 14:20:17 1957 [Note] InnoDB: FTS optimize thread exiting. 2015-08-13 14:20:17 1957 [Note] InnoDB: Starting shutdown... 2015-08-13 14:20:18 1957 [Note] InnoDB: Shutdown completed; log sequence number 1625987 |
OK
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
To start mysqld at boot time you have to copy support-files/mysql.server to the right place for your system PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER ! To do so, start the server, then issue the following commands: ./bin/mysqladmin -u root password 'new-password' ./bin/mysqladmin -u root -h localhost.localdomain password 'new-password' Alternatively you can run: ./bin/mysql_secure_installation which will also give you the option of removing the test databases and anonymous user created by default . This is strongly recommended for production servers. See the manual for more instructions. You can start the MySQL daemon with : cd . ; ./bin/mysqld_safe & You can test the MySQL daemon with mysql-test-run.pl cd mysql-test ; perl mysql-test-run.pl Please report any problems at http://bugs.mysql.com/ The latest information about MySQL is available on the web at http://www.mysql.com Support MySQL by buying support/licenses at http://shop.mysql.com New default config file was created as ./my.cnf and will be used by default by the server when you start it. You may edit this file to change server settings WARNING: Default config file /etc/my.cnf exists on the system This file will be read by default by the MySQL server If you do not want to use this, either remove it, or use the --defaults-file argument to mysqld_safe when starting the server [root@localhost mysql]# |
[Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
其原因是从 5.6开始,timestamp 的默认行为已经是 deprecated 了。
在MySQL 5.6.6之前,TIMESTAMP的默认行为:
TIMESTAMP列如果没有明确声明NULL属性,默认为NOT NULL。(而其他数据类型,如果没有显示声明为NOT NULL,则允许NULL值。)设置TIMESTAMP的列值为NULL,会自动存储为当前timestamp。
表中的第一个TIMESTAMP列,如果没有声明NULL属性、DEFAULT或者 ON UPDATE,会自动分配 DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP 属性。
表中第二个TIMESTAMP列,如果没有声明为NULL或者DEFAULT子句,默认自动分配'0000-00-00 00:00:00′。插入行时没有指明改列的值,该列默认分配'0000-00-00 00:00:00′,且没有警告。
要关闭警告,需要加入下面的参数:
1
|
explicit_defaults_for_timestamp= true |
重启MySQL后错误消失,这时TIMESTAMP的行为如下:
TIMESTAMP如果没有显示声明NOT NULL,是允许NULL值的,可以直接设置改列为NULL,而没有默认填充行为。
TIMESTAMP不会默认分配DEFAULT CURRENT_TIMESTAMP 和 ON UPDATE CURRENT_TIMESTAMP属性。
声明为NOT NULL且没有默认子句的TIMESTAMP列是没有默认值的。往数据表中插入列,又没有给TIMESTAMP列赋值时,如果是严格SQL模式,会抛出一 个错误,如果严格SQL模式没有启用,该列会赋值为'0000-00-00 00:00:00′,同时出现一个警告。(这和MySQL处理其他时间类型数据一样,如DATETIME)
(参见:http://www.zzvips.com/article/66880.html)
也就是 explicit_defaults_for_timestamp 关闭了 timestamp 类型字段锁拥有的一些会让人感到奇怪的默认行为,加入了该参数之后,如果还需要为 timestamp类型的字段指定默认行为,那么就需要显示的在创建表时显示的指定。explicit_defaults_for_timestamp 也就是这个意思:显示指定默认值为timestamp类型的字段。