我可以在查询中避免使用sql_mode吗?

时间:2011-04-26 10:26:57

标签: mysql sql-mode

我看到我在表格末尾有这个代码,我想在我的数据库中插入:

/*!40000 ALTER TABLE `to_import` ENABLE KEYS */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;

当我尝试在phpMyAdmin上执行查询时,我得到#1231 - Variable 'sql_mode' can't be set to the value of 'NULL'而我不明白为什么。

那么,我可以删除/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;吗?这么重要吗?试图了解这一点,但实际上我不明白它的作用。

1 个答案:

答案 0 :(得分:2)

可能在表定义之上有SET @OLD_SQL_MODE = @@sql_mode; SET SQL_MODE='something'。显然你忘了在复制的SQL中包含它。

您的导出工具希望ALTER TABLE以某种SQL模式执行,并在ALTER TABLE之前设置它。要稍后将其重置为之前的值,它会将当前值存储在名为@OLD_SQL_MODE的变量中。 该行的目的是将SQL_MODE重置为之前的状态。

因此,您需要同时拥有上面的SET和表定义下面的SET,或者不需要它们。