sqle
sqle copied to clipboard
编码格式设置为utf8mb3会导致无法解析sql
é®é¢æè¿°
- æ§è¡ä¸æ¹å»ºè¡¨è¯å¥ä¼æ¥åºæ æ³è§£æçé误
CREATE TABLE `tb01` (
`ID` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'èªå¢ ID',
`NAME` varchar(20) NOT NULL DEFAULT '' COMMENT 'åå',
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='æµè¯è¡¨'
- å¦æ表æ¯utf8mb3ç¼ç , æ¹è¡¨è¯å¥å°æ æ³æ£å¸¸å·¥ä½
修复方案
将所有解析器抛出的错误记录到审核结果中, 而非弹窗报错
修复方式
增加一个新的错误代码, 将所有解析器的错误包装为此错误, 然后在调用处判断错误类型, 如果为此错误则记录到审核结果中, 如果不是则保持原流程
影响功能
影响原因
上述功能均涉及使用GetCreateTableStmt()方法, 此方法内部的ParseOneSql()解析sql失败会抛出此错误
相关代码改动说明
- ParseSql() 改动错误类型无影响, 因为此函数内部的p.PerfectParse() 错误总是为空, 改动仅为了和ParseOneSql()错误类型保持一致, 即解析器抛出的错误统一
- 更新无效检查的错误信息, 防止被误认为是预检查的错误
- 统一在无效检查时记录解析器错误, 其他位置(回滚, 检查项, 索引优化等) 此错误将不再抛出, 在无效检查时记录是因为此处第一个执行, 其他功能均在无效检查之后
因为影响面太大, 暂时停止处理, 研究一下有没有更好的方案, 当前改动放在issue_488分支中, 相关链接: https://github.com/actiontech/sqle/tree/issue_488
参考 #1630 提到的方案
验证版本:
UI Version: main 0d3caf7
Server Version: main-ee 32288994f7
验证结果: