有一张表通过jdbc写入不了数据

中午发现有一张表通过jdbc写入不了数据,但是通过客户端可以写,其他的表通过jdbc写也不会有问题。
analyze这个表,也没有特殊信息

gg_submit_08_04 | CREATE TABLE gg_submit_08_04 (
account_name varchar(128) DEFAULT NULL,
advertiser_code varchar(128) DEFAULT NULL,
advertiser_name varchar(128) DEFAULT NULL,
app_id varchar(100) DEFAULT NULL,
aspect_ratio varchar(100) DEFAULT NULL,
call_corp_code varchar(128) DEFAULT NULL,
call_corp_name varchar(128) DEFAULT NULL,
card_type_code varchar(128) DEFAULT NULL,
cause varchar(50) DEFAULT NULL,
chat_id varchar(100) DEFAULT NULL,
click_content varchar(1024) DEFAULT NULL,
click_pos varchar(100) DEFAULT NULL,
click_words varchar(100) DEFAULT NULL,
common_key varchar(20) DEFAULT NULL,
common_param1 varchar(512) DEFAULT NULL,
common_param2 varchar(100) DEFAULT NULL,
common_value varchar(200) DEFAULT NULL,
content_id varchar(500) DEFAULT NULL,
create_time datetime DEFAULT NULL,
delete_flag int(3) DEFAULT NULL,
device_code varchar(128) DEFAULT NULL,
device_name varchar(128) DEFAULT NULL,
dom_struct text DEFAULT NULL,
elem_name varchar(100) DEFAULT NULL,
etl_time datetime DEFAULT NULL,
flow_business_unit_id int(11) DEFAULT NULL,
flow_business_unit_name varchar(128) DEFAULT NULL,
flow_center_code varchar(128) DEFAULT NULL,
flow_corp_code varchar(128) DEFAULT NULL,
flow_corp_name varchar(128) DEFAULT NULL,
flow_depart_id int(11) DEFAULT NULL,
flow_depart_name varchar(128) DEFAULT NULL,
flow_group_id int(11) DEFAULT NULL,
flow_group_name varchar(128) DEFAULT NULL,
flow_studio_id int(11) DEFAULT NULL,
flow_studio_name varchar(128) DEFAULT NULL,
id bigint(11) NOT NULL,
info_type varchar(4) DEFAULT NULL,
is_main_page varchar(128) DEFAULT NULL,
message_type varchar(20) DEFAULT NULL,
message_value varchar(200) DEFAULT NULL,
mlink_id varchar(100) DEFAULT NULL,
mlink_url varchar(1024) DEFAULT NULL,
module_code varchar(100) DEFAULT NULL,
module_id varchar(50) DEFAULT NULL,
module_name varchar(100) DEFAULT NULL,
module_version varchar(20) DEFAULT NULL,
ntfk_uid varchar(10240) DEFAULT NULL,
ocpa_req_param text DEFAULT NULL,
open_id varchar(100) DEFAULT NULL,
original_id bigint(11) DEFAULT NULL,
page_id varchar(50) DEFAULT NULL,
page_message_id varchar(100) DEFAULT NULL,
page_version varchar(20) DEFAULT NULL,
pm_account varchar(128) DEFAULT NULL,
product varchar(100) DEFAULT NULL,
promote_type_code varchar(128) DEFAULT NULL,
promote_url varchar(2048) DEFAULT NULL,
promote_url_decode varchar(2048) DEFAULT NULL,
pv_id varchar(100) DEFAULT NULL,
raw_url text DEFAULT NULL,
resp_account varchar(128) DEFAULT NULL,
result varchar(50) DEFAULT NULL,
rowkey varchar(128) DEFAULT NULL,
scene varchar(50) DEFAULT NULL,
send_date date DEFAULT NULL,
send_month_date date DEFAULT NULL,
send_time varchar(20) DEFAULT NULL,
send_weekend_date date DEFAULT NULL,
site_call_business_name varchar(128) DEFAULT NULL,
site_call_business_unit_id int(11) DEFAULT NULL,
site_call_quantum_id int(11) DEFAULT NULL,
site_call_quantum_name varchar(128) DEFAULT NULL,
site_channel_type varchar(128) DEFAULT NULL,
site_city_id int(11) DEFAULT NULL,
site_city_name varchar(128) DEFAULT NULL,
site_id varchar(100) DEFAULT NULL,
site_name varchar(128) DEFAULT NULL,
site_project_code varchar(128) DEFAULT NULL,
site_project_name varchar(128) DEFAULT NULL,
site_province_id int(11) DEFAULT NULL,
site_province_name varchar(128) DEFAULT NULL,
split_index varchar(50) DEFAULT NULL,
status varchar(100) DEFAULT NULL,
t_info_submit_log_2020_08_04_df varchar(1) DEFAULT NULL,
template_id varchar(50) DEFAULT NULL,
template_version varchar(20) DEFAULT NULL,
uid varchar(100) DEFAULT NULL,
url varchar(2048) DEFAULT NULL,
url_version varchar(10) DEFAULT NULL,
vv_id varchar(100) DEFAULT NULL,
website_code varchar(128) DEFAULT NULL,
t_info_submit_log_df varchar(1) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin

提供下 tidb 的版本
说明下 jdbc 是否出现什么报错
看下 jdbc 写入失败时间点 tidb log 是否有报错

集群版本:v4.0.4
jdbc未报错,commit正常执行。
tidb.log有报错。
这个是由于date格式不正确导致的问题,但是客户端和jdbc表现不一致


如果这个报错已经忽略,tidb 侧没有其他报错,使用命令端也可以插入。感觉问题应该在 jdbc 侧,麻烦检查下 jdbc,多谢。

jdbc就是正常的写入,已经正常写入好几个月了。
这个数据在通过客户端写入的时候,是报了warning的,而且日期写为0000-00-00。
jdbc端既没有报错,但是数据也没有写入。和客户端的写入表现不一致。

那您可以继续查看下JDBC端吧,是不是没有异常抛出什么的?

断点没有进入catch,直接走的finally。:scream:

给下上面的表结构个 insert into 语句

你好,可以拿一下在jdbc无法写入的时段,tidb的日志吗。tidb和jdbc对于写入数据行为不一致可能是由于 jdbc 设置了 sql mode 导致的。需要看一下日志是否有设置变量这一操作。

这个问题不是不能写入,而是写入过程jdbc和客户端对date格式异常的处理不一致
:sob:全局sql_mode和jdbc的不一致,但是jdbc没有设置sql_mode


image

这个是由于mysql客户端的 sql mode 中没有设置 STRICT_TRANS_TABLES 这个 mode,而 jdbc 里设置的 sql mode 有这个。
STRICT_TRANS_TABLES 会禁止类似 0000-00-00 的数据写入。
可以通过在 jdbc 的连接 url 里设置 &&sessionVariables=sql_mode='' 来设置 jdbc 的sql_mode

好的,这个STRICT_TRANS_TABLES模式是jdbc默认自动设置的:rofl:
谢谢老师解答

:+1::+1::+1:

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。