Kongdom
(Kongdom)
1
为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
很奇怪的一个错误,tb_customer是一个会员表,c_org_id是主键,c_born_date是生日,
1、执行以下语句会报错
select * from tb_customer
where TIMESTAMPDIFF(YEAR, c_born_date, now()) <18
and c_org_id = ‘8’
[Err] 1105 - other error: Eval error: UnknownSignature(TimestampDiff)
2、执行以下语句不报错
select * from tb_customer
where TIMESTAMPDIFF(YEAR, c_born_date, now()) <18
3、执行以下语句不报错
select * from (
select * from tb_customer
limit 2
) t
where TIMESTAMPDIFF(YEAR, c_born_date, now()) <18
and c_org_id = ‘8’
4、执行以下语句会报相同的错误,其中c_no为上面语句的结果
select * from (
select * from tb_customer
where c_no in (‘123’,‘456’)
) t
where TIMESTAMPDIFF(YEAR, c_born_date, now()) <18
and c_org_id = ‘8’
同时,以上报错语句在本地单机部署环境中不报错,在生产环境集群部署下报错。
若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出打印结果,请务必全选并复制粘贴上传。
1 个赞
Kongdom
(Kongdom)
4
可能和数据问题,我copy出来一个表结构,没有数据,在copy中查询,就不报错
来了老弟
5
你好,
方便提供下脱敏的表结构,如果可以给你测试数据这边验证下。
Kongdom
(Kongdom)
6
我刚试了一下,
copy表里只插入一条时间大于当前时间的数据,会报错。但是去掉c_org_id后也不报错。
copy表里只插入一条时间小于当前时间的数据,不会报错。
Kongdom
(Kongdom)
8
SET FOREIGN_KEY_CHECKS=0;
DROP TABLE IF EXISTS tb_customer_copy
;
CREATE TABLE tb_customer_copy
(
c_born_date
datetime DEFAULT NULL,
c_org_id
varchar(10) COLLATE utf8_bin NOT NULL DEFAULT ‘’,
PRIMARY KEY (c_org_id
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
Kongdom
(Kongdom)
9
现在比较奇怪的是,只有生产环境有这个问题,不知道是不是哪里配置有问题。
Kongdom
(Kongdom)
10
select * from tb_customer where c_born_date > ‘2020-02-02’
本来想用上面的写法的,但是报错
Other("[src/coprocessor/codec/mysql/time/mod.rs:93]: ‘1948-5-1 0:0:0.000000000’ is not a valid datetime in specified time zone")
就用了timestampdiff,结果又报现在这种错误。。。
来了老弟
11
你好,
我这边验证下。不知是否使用的是三方连接工具?
尝试使用 mysql -uroot -p -P -h 连接执行是否报错。
Kongdom
(Kongdom)
13
不过,这个最开始是程序里报错,然后在navacit中重现出来的。我先试试吧
来了老弟
16
tidb 需要 mysql-client 来连接,所以请确定线上是否安装 mysql-server 服务,没有可以安装下。。。
来了老弟
19
可以在安装好 mysql-server 在命令行试下哈