Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 索引:无效的默认值为';[专栏]';_Mysql_Indexing_Mysql 5.7 - Fatal编程技术网

Mysql 索引:无效的默认值为';[专栏]';

Mysql 索引:无效的默认值为';[专栏]';,mysql,indexing,mysql-5.7,Mysql,Indexing,Mysql 5.7,我正在开发一个已有10年历史的web应用程序(!!!) &目前正在本地运行mysql,版本为5.7 这是我目前正在处理的表: CREATE TABLE `processes_history` ( `p_id` bigint(20) UNSIGNED NOT NULL DEFAULT '0', `exec_id` bigint(20) UNSIGNED NOT NULL DEFAULT '0', `feature` varchar(100) NOT NULL DEFAULT '',

我正在开发一个已有10年历史的web应用程序(!!!) &目前正在本地运行mysql,版本为5.7

这是我目前正在处理的表:

CREATE TABLE `processes_history` (
  `p_id` bigint(20) UNSIGNED NOT NULL DEFAULT '0',
  `exec_id` bigint(20) UNSIGNED NOT NULL DEFAULT '0',
  `feature` varchar(100) NOT NULL DEFAULT '',
  `macro` tinyint(1) UNSIGNED NOT NULL DEFAULT '0',
  `ts` date NOT NULL DEFAULT '0000-00-00',
  `seen` int(10) UNSIGNED NOT NULL DEFAULT '1',
  `seen_time` bigint(20) UNSIGNED NOT NULL DEFAULT '0',
  `focus` int(10) UNSIGNED NOT NULL DEFAULT '0',
  `focus_time` bigint(20) UNSIGNED NOT NULL DEFAULT '0',
  `mouse` int(10) UNSIGNED NOT NULL DEFAULT '0',
  `keyboard` int(10) UNSIGNED NOT NULL DEFAULT '0',
  `interactive` int(10) UNSIGNED NOT NULL DEFAULT '0',
  `interactive_time` bigint(20) UNSIGNED NOT NULL DEFAULT '0',
  `last_seen` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=MyISAM DEFAULT CHARSET=utf8
PARTITION BY RANGE (TO_DAYS(`ts`))
(
PARTITION p0 VALUES LESS THAN (736695) ENGINE=MyISAM,
PARTITION p201701 VALUES LESS THAN (736726) ENGINE=MyISAM,
PARTITION p201702 VALUES LESS THAN (736754) ENGINE=MyISAM,
PARTITION p201703 VALUES LESS THAN (736785) ENGINE=MyISAM,
PARTITION p201704 VALUES LESS THAN (736815) ENGINE=MyISAM,
PARTITION p201705 VALUES LESS THAN (736846) ENGINE=MyISAM,
PARTITION p201706 VALUES LESS THAN (736876) ENGINE=MyISAM,
PARTITION p201707 VALUES LESS THAN (736907) ENGINE=MyISAM,
PARTITION p201708 VALUES LESS THAN (736938) ENGINE=MyISAM,
PARTITION p201709 VALUES LESS THAN (736968) ENGINE=MyISAM,
PARTITION p201710 VALUES LESS THAN (736999) ENGINE=MyISAM,
PARTITION p201711 VALUES LESS THAN (737029) ENGINE=MyISAM,
PARTITION p201712 VALUES LESS THAN (737060) ENGINE=MyISAM,
PARTITION p201801 VALUES LESS THAN (737091) ENGINE=MyISAM,
PARTITION pmax VALUES LESS THAN MAXVALUE ENGINE=MyISAM
);

--
-- Indexes for dumped tables
--

--
-- Indexes for table `processes_history`
--
ALTER TABLE `processes_history`
  ADD PRIMARY KEY (`p_id`,`exec_id`,`feature`,`ts`),
  ADD KEY `ts` (`ts`),
  ADD KEY `exec_ts` (`exec_id`,`ts`),
  ADD KEY `last_seen` (`last_seen`);
p\u id、exec\u id、ts添加索引时,我不断收到一个错误:

ALTER TABLE `dbname`.`processes_history` ADD INDEX `p_id,exec_id,ts` (`p_id`, `exec_id`, `ts`);
错误SQL查询:

ALTER TABLE
dbname
处理历史记录
添加索引
p\U id、exec\U id、ts
p_id
exec_id
ts
)MySQL说:文档

1067-无效的“ts”默认值 在这篇文章之后:

据我所知,使用
0000-00-00
作为默认值会破坏“日期”类型,这就是它不起作用的原因

但我就是不明白这种情况的解决方案是什么。改为使用时间戳类型


有没有一种方法可以在不破坏结构的情况下解决这个问题(至少现在是这样)在我完成整个web应用程序的时候?很多事情都依赖于该表,我确实不想做一些冒险的事情,以我想要的方式对其进行索引。

更改SQL\u模式解决了问题:

我比较了MySQL 5.7和5.6,似乎5.7有默认的限制:
只有完整的分组依据、严格的转换表、没有零的输入日期、没有零的日期、按零划分的错误、没有自动创建用户和没有引擎替换
set()

在5.6上:只需
无引擎替换
(mysql 5.6手册)

为了让我的本地mysql(5.7)与生产版本(5.6)同步工作,我只需
NO\u ENGINE\u SUBSTITUTION

SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION';
SET SESSION sql_mode = 'NO_ENGINE_SUBSTITUTION';
您可以查看有关db stackexchange的更多信息。

  • 您需要更改为InnoDB——下一个版本(8.0)已删除MyISAM
  • 大约在5.6的某个地方,
    TIMESTAMP
    的默认处理发生了变化。想想你有什么价值观,你需要什么价值观
  • 分区
    很少提高性能;什么问题促使你使用它

暂时将有问题的列设置为可空也可以解决此问题。

您使用
0000-00-00
作为
ts
日期列的默认值是什么?让它可以为null,并适当地处理它。除了索引的这种表现形式是一个问题外,我似乎还记得还有其他可能发生的问题。最短日期是
1000-01-01 00:00:00
,因此可以使用它作为默认值,或者按照Tim的建议使列为空。@TimBiegeleisen我会,但在我之前工作过那个数据库的人不知为什么把它设为主键。这就是我在尝试将其设置为NULL时得到的结果:
queryerror:#1171-主键的所有部分都不能为NULL;如果密钥中需要NULL,请改用UNIQUE
:这是唯一的解决方案吗?