0
点赞
收藏
分享

微信扫一扫

MySQL 5.6 中TIMESTAMP with implicit DEFAULT value is deprecated错误

8052cf60ff5c 2022-02-13 阅读 195


安装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

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101



​[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 的默认行为已经是 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

2



​[mysqld]​

​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)

(参见:​​//www.jb51.net/article/71054.htm​​)

也就是 explicit_defaults_for_timestamp 关闭了 timestamp 类型字段锁拥有的一些会让人感到奇怪的默认行为,加入了该参数之后,如果还需要为 timestamp类型的字段指定默认行为,那么就需要显示的在创建表时显示的指定。explicit_defaults_for_timestamp 也就是这个意思:显示指定默认值为timestamp类型的字段。


举报

相关推荐

0 条评论