如何修复“变量'sql_mode'不能设置为'NULL'的值”错误

时间:2011-04-24 22:11:26

标签: mysql

我有这张桌子:

# Dumping structure for table editz.to_import
CREATE TABLE IF NOT EXISTS `to_import` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `reference` int(11) unsigned NOT NULL,
  `trackid` int(11) unsigned NOT NULL,
  `side_pos1` char(2) NOT NULL,
  `side1` varchar(255) NOT NULL,
  `pos1` char(2) NOT NULL,
  `hh1` char(2) NOT NULL,
  `mm1` char(2) NOT NULL,
  `ss1` char(2) NOT NULL,
  `atl1` varchar(255) NOT NULL,
  `side_pos2` char(2) NOT NULL,
  `side2` varchar(255) NOT NULL,
  `pos2` char(2) NOT NULL,
  `hh2` char(2) NOT NULL,
  `mm2` char(2) NOT NULL,
  `ss2` char(2) NOT NULL,
  `atl2` varchar(255) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1311 DEFAULT CHARSET=utf8;

# Dumping data for table editz.to_import: ~1.025 rows (approximately)
DELETE FROM `to_import`;
/*!40000 ALTER TABLE `to_import` DISABLE KEYS */;
INSERT INTO `to_import` (`id`, `reference`, `trackid`, `side_pos1`, `side1`, `pos1`, `hh1`, `mm1`, `ss1`, `atl1`, `side_pos2`, `side2`, `pos2`, `hh2`, `mm2`, `ss2`, `atl2`) VALUES
    (1, 205, 550, '0', 'Single Side', '0', '??', '??', '??', 'Noizefucker - Tons Of Bluesteel - Special Forces', '0', 'Single Side', '0', '??', '??', '??', 'Noizefucker - Tons Of Bluesteel - Special Forces'),
    ... some lines, approx 1300)...
    (1310, 268, 463, '#', '', '20', '00', '41', '00', 'Ingler - Trek', '#', '', '20', '00', '41', '00', 'Ingler - Trek');
/*!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' 

为什么呢?我怎样才能解决这个问题呢?我正在使用HeidiSql 6导出该表...

事实上,我的数据库中添加了表格和数据,我只是不明白为什么会这样消息...

5 个答案:

答案 0 :(得分:11)

如果您发布的代码是您正在运行的整个代码,那么原因将是:

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;

通常,您还可以在SQL转储的顶部将其保留在转储前保留原始值:

/*!40101 SET OLD_SQL_MODE=@SQL_MODE */;

在你发布的内容中,这个被省略了,所以@OLD_SQL_MODE是NULL,所以最后你要将它设置为NULL。

答案 1 :(得分:4)

我没有使用phpMyAdmin但是它可能与实际声明数据库的sql模式有关吗?

SQL模式定义数据库应支持的语法以及应该进行的验证检查。

在Mysql命令行中,您可以通过以下方式检查sql模式的声明:

mysql> SELECT @@sql_mode;

Overview of sql modes

List of modes

答案 2 :(得分:2)

在重新启动将大文件导入到已超时的MySQL后出现类似问题。这个链接的解释似乎很合适。就我而言,根据我发现的答案,一切似乎都没问题。注意,我没有使用Drupal。

http://drupal.org/node/703764

答案 3 :(得分:0)

以上解决方案都没有为我解决。如果以上(以CREATE TABLE开头)是您的转储文件,则需要在CREATE TABLE命令上面添加以下内容:

/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;

PS:调试它的好方法是创建现有数据库的新转储,看看这两个文件之间有什么不同。尝试添加这些语句,它应该修复它。

答案 4 :(得分:0)

您可以在“ \ mysql \ bin \ my.ini”中尝试以下配置,它将解决此问题。

[mysqld]
max_allowed_packet = 64M
default_time_zone="+00:00"