MySQL 5.6 中TIMESTAMP with implicit DEFAULT value is deprecated錯(cuò)誤
安裝MySQL時(shí),有warning:
[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 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 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 的默認(rèn)行為已經(jīng)是 deprecated 了。
在MySQL 5.6.6之前,TIMESTAMP的默認(rèn)行為:
•TIMESTAMP列如果沒有明確聲明NULL屬性,默認(rèn)為NOT NULL。(而其他數(shù)據(jù)類型,如果沒有顯示聲明為NOT NULL,則允許NULL值。)設(shè)置TIMESTAMP的列值為NULL,會自動存儲為當(dāng)前timestamp。
•表中的第一個(gè)TIMESTAMP列,如果沒有聲明NULL屬性、DEFAULT或者 ON UPDATE,會自動分配 DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP 屬性。
•表中第二個(gè)TIMESTAMP列,如果沒有聲明為NULL或者DEFAULT子句,默認(rèn)自動分配'0000-00-00 00:00:00′。插入行時(shí)沒有指明改列的值,該列默認(rèn)分配'0000-00-00 00:00:00′,且沒有警告。
要關(guān)閉警告,需要加入下面的參數(shù):
[mysqld] explicit_defaults_for_timestamp=true
重啟MySQL后錯(cuò)誤消失,這時(shí)TIMESTAMP的行為如下:
•TIMESTAMP如果沒有顯示聲明NOT NULL,是允許NULL值的,可以直接設(shè)置改列為NULL,而沒有默認(rèn)填充行為。
•TIMESTAMP不會默認(rèn)分配DEFAULT CURRENT_TIMESTAMP 和 ON UPDATE CURRENT_TIMESTAMP屬性。
•聲明為NOT NULL且沒有默認(rèn)子句的TIMESTAMP列是沒有默認(rèn)值的。往數(shù)據(jù)表中插入列,又沒有給TIMESTAMP列賦值時(shí),如果是嚴(yán)格SQL模式,會拋出一 個(gè)錯(cuò)誤,如果嚴(yán)格SQL模式?jīng)]有啟用,該列會賦值為'0000-00-00 00:00:00′,同時(shí)出現(xiàn)一個(gè)警告。(這和MySQL處理其他時(shí)間類型數(shù)據(jù)一樣,如DATETIME)
(參見:http://chabaoo.cn/article/71054.htm)
也就是 explicit_defaults_for_timestamp 關(guān)閉了 timestamp 類型字段鎖擁有的一些會讓人感到奇怪的默認(rèn)行為,加入了該參數(shù)之后,如果還需要為 timestamp類型的字段指定默認(rèn)行為,那么就需要顯示的在創(chuàng)建表時(shí)顯示的指定。explicit_defaults_for_timestamp 也就是這個(gè)意思:顯示指定默認(rèn)值為timestamp類型的字段。
相關(guān)文章
MySQL數(shù)據(jù)庫運(yùn)維之?dāng)?shù)據(jù)恢復(fù)的方法
本篇文章主要介紹了MySQL數(shù)據(jù)庫運(yùn)維之?dāng)?shù)據(jù)恢復(fù)的方法,此處總結(jié)一下恢復(fù)方案,并結(jié)合數(shù)據(jù)庫的二進(jìn)制日志做下數(shù)據(jù)恢復(fù)的示范。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-06-06MySQL ClickHouse常用表引擎超詳細(xì)講解
這篇文章主要介紹了MySQL ClickHouse常用表引擎,ClickHouse表引擎中,CollapsingMergeTree和VersionedCollapsingMergeTree都能通過標(biāo)記位按規(guī)則折疊數(shù)據(jù),從而達(dá)到更新和刪除的效果2022-11-11MySQL定時(shí)備份數(shù)據(jù)庫操作示例
這篇文章主要介紹了MySQL定時(shí)備份數(shù)據(jù)庫操作,結(jié)合實(shí)例形式分析了MySQL定時(shí)備份數(shù)據(jù)庫相關(guān)命令、原理、實(shí)現(xiàn)方法及操作注意事項(xiàng),需要的朋友可以參考下2020-03-03搞定mysql行轉(zhuǎn)列的7種方法以及列轉(zhuǎn)行
在MySQL數(shù)據(jù)庫中,有時(shí)候我們需要將一列數(shù)據(jù)轉(zhuǎn)化為行數(shù)據(jù),以便更好地進(jìn)行數(shù)據(jù)分析和處理,下面這篇文章主要給大家介紹了關(guān)于搞定mysql行轉(zhuǎn)列的7種方法以及列轉(zhuǎn)行的相關(guān)資料,需要的朋友可以參考下2024-03-03