未验证 提交 99777b4b 编写于 作者: B beifangxiuwhx 提交者: GitHub

OB-FIX UP#001: 修复Binary类型的数据校验字符集的问题 (#1086)

Description:
============

对于Binary类型来说,所有数据的存储看作二进制,是不需要校验字符集的。

但是OB在处理Binary类型的数据操作时,会校验字符集,举个例子,如果你在utf8mb4的表里,往binary写入GBK编码的"你"字,是会报错的。只能以 insert into t values(X'C4E3')方法插入

这对业务从mysql迁移到OB是很痛苦的事情。

Analysis:
=========

OB的binary类型底层实现和varchar相同,只在DDL阶段会区分binary类型。

出错的原因是在SQL解析阶段(transform_tree)将binary的字段按varchar处理进行字符集编码检查。这是因为在词法语法解析时数据库无从得知当前的字符串是否为binary(目前SQL解析阶段还获取不到实际表结构)

Fix:
========
修复方法:

个人觉得词法语法解析阶段进行字符集检查完全没有必要,后续物理执行计划算子打开时,OB也会对字符集编码进行处理。

因此,建议删除resolve_const函数中的check_well_formed_str

目前来看,这个函数只用来处理SQL解析后的parseNode节点,对后续的SQL逻辑没有侵入。

-------------

wenghaixing@unionpay.com
上级 91a49c7b
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册