专家好,对SIG会议遗留的no_zero_date和sql_mode_strict的调研内容如下:
1. 与str_to_date函数有关的no_zero_date参数
此参数确实会影响到插表时内容。设置了no_zero_date,则’0000-00-00’会被认为是非法日期;否则’0000-00-00’会被认为是合法日期。str_to_date目前对此处做了兼容。
2. sql_mode_strict参数针对日期函数调用的表现
严格模式(含sql_mode_strict):函数select有错返回null,函数insert有错抛出错误。
不严格模式(不含sql_mode_strict):函数select有错返回null,函数insert有错返回null。
一些情况:
1. 目前日期类型解析函数没有考虑sql_mode_strict、no_zero_date、no_zero_in_date这些参数是否设置的情况,即遇到非法值就会抛出错误。这些参数和插表也有关系。
2. 日期处理函数中间报错
需要在报错的所有情况内都加上sql_mode的判断,而后才能决定是报错还是返回NULL。
3. 以往已经兼容的日期处理函数或者时间处理函数大多是按照严格模式下insert行为来兼容的,即不合法就报错。如果要修改,则涉及到的相关函数可能都需要针对sql_mode_strict做兼容修改。
目前建议是:
1. openGauss目前不支持’0000-00-00’日期存在,则删除str_to_date中对此处的兼容,和openGauss此处保持一致。
2. 函数统一兼容为严格模式下的insert表现,即有非法值则报错。