sql_mode...foreign_key_checks...unique_checks...sql_notes不能為null

掠程師發表於2017-11-01

#問題重現

資料庫服務中source命令執行******.sql指令碼時報錯

##報錯內容

Query OK, 2 rows affected (0.04 sec)
Records: 2  Duplicates: 0  Warnings: 0

ERROR 1231 (42000): Variable 'sql_mode' can't be set to the value of 'NULL'
ERROR 1231 (42000): Variable 'foreign_key_checks' can't be set to the value of 'NULL'
ERROR 1231 (42000): Variable 'unique_checks' can't be set to the value of 'NULL'
ERROR 1231 (42000): Variable 'sql_notes' can't be set to the value of 'NULL'

##原因:

****.sql指令碼中包含如下內容:
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

##解決方法

刪除指令碼中上面內容

/*!...*/含義:
	MYSQL中為了保持相容,比如從mysqldump 匯出的SQL語句能被其它資料庫直接使用,它把一些特有的僅在MYSQL上的語句放在 /*! ... */ 中,這樣這些語句如果在其它資料庫中是不會被執行,但在MYSQL中它會執行

eg:
CREATE /*!32302 TEMPORARY */ TABLE t (a INT);
這意味著,如果你的版本號為3.23.02或更高,MySQL伺服器將使用TEMPORARY關鍵字。

##注意
匯出資料庫儘量不要使用工具匯出,使用mysqldump命令

相關文章