安裝MySQL時,有warning:
[root@localhost mysql]# scripts/mysql_install_db --user=mysqlInstalling 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 pages2015-08-13 14:20:09 1934 [Note] InnoDB: The InnoDB memory heap is disabled2015-08-13 14:20:09 1934 [Note] InnoDB: Mutexes and rw_locks use InnoDB's own implementation2015-08-13 14:20:09 1934 [Note] InnoDB: Memory barrier is not used2015-08-13 14:20:09 1934 [Note] InnoDB: Compressed tables use zlib 1.2.32015-08-13 14:20:09 1934 [Note] InnoDB: Using Linux native AIO2015-08-13 14:20:09 1934 [Note] InnoDB: Not using CPU crc32 instructions2015-08-13 14:20:09 1934 [Note] InnoDB: Initializing buffer pool, size = 128.0M2015-08-13 14:20:09 1934 [Note] InnoDB: Completed initialization of buffer pool2015-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 MB2015-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 MB2015-08-13 14:20:11 1934 [Note] InnoDB: Setting log file ./ib_logfile1 size to 48 MB2015-08-13 14:20:12 1934 [Note] InnoDB: Renaming log file ./ib_logfile101 to ./ib_logfile02015-08-13 14:20:12 1934 [Warning] InnoDB: New log files created, LSN=457812015-08-13 14:20:12 1934 [Note] InnoDB: Doublewrite buffer not found: creating new2015-08-13 14:20:12 1934 [Note] InnoDB: Doublewrite buffer created2015-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 created2015-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 start2015-08-13 14:20:12 1934 [Note] InnoDB: 5.6.26 started; log sequence number 02015-08-13 14:20:14 1934 [Note] Binlog end2015-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
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 pages2015-08-13 14:20:16 1957 [Note] InnoDB: The InnoDB memory heap is disabled2015-08-13 14:20:16 1957 [Note] InnoDB: Mutexes and rw_locks use InnoDB's own implementation2015-08-13 14:20:16 1957 [Note] InnoDB: Memory barrier is not used2015-08-13 14:20:16 1957 [Note] InnoDB: Compressed tables use zlib 1.2.32015-08-13 14:20:16 1957 [Note] InnoDB: Using Linux native AIO2015-08-13 14:20:16 1957 [Note] InnoDB: Not using CPU crc32 instructions2015-08-13 14:20:16 1957 [Note] InnoDB: Initializing buffer pool, size = 128.0M2015-08-13 14:20:16 1957 [Note] InnoDB: Completed initialization of buffer pool2015-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 start2015-08-13 14:20:16 1957 [Note] InnoDB: 5.6.26 started; log sequence number 16259772015-08-13 14:20:17 1957 [Note] Binlog end2015-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
To start mysqld at boot time you have to copysupport-files/mysql.server to the right place for your systemPLEASE 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_installationwhich will also give you the option of removing the testdatabases and anonymous user created by default. This isstrongly 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.plPlease report any problems at http://bugs.mysql.com/The latest information about MySQL is available on the web at http://www.mysql.comSupport MySQL by buying support/licenses at http://shop.mysql.comNew default config file was created as ./my.cnf andwill be used by default by the server when you start it.You may edit this file to change server settingsWARNING: Default config file /etc/my.cnf exists on the systemThis file will be read by default by the MySQL serverIf 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′,且沒有警告。
要關閉警告,需要加入下面的參數:
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.jb51.net/article/71107.htm)
也就是 explicit_defaults_for_timestamp 關閉了 timestamp 類型欄位鎖擁有的一些會讓人感到奇怪的預設行為,加入了該參數之後,如果還需要為 timestamp類型的欄位指定預設行為,那麼就需要顯示的在建立表時顯示的指定。explicit_defaults_for_timestamp 也就是這個意思:顯示指定預設值為timestamp類型的欄位。