远航
#1
Oceanbase版本:4.3.3.0
执行SQL
select * from (select * from userinfos) limit 0,1
MySQL8.0执行结果:
1248 - Every derived table must have its own alias
Oceanbase可以正常查询结果
如果子查询增加上别名的话两种数据库都可以正常,请问这个可以让Oceanbase的表现行为和MySQL表现一致麽,因为我们的业务系统开发环境已经切换到Oceanbase,部分客户生产环境还没切换,导致在开发环境下没问题的SQL语句在生产环境就会出错。
辞霜
#3
你意思是想把当前433ob开发环境设置为执行该sql后与mysql一样报错?
banjin
#6
这个准确来说变的更好了啊,兼容mysql是mysql的语法oceanbase都兼容,这个还是要限制开发按mysql规范开发吧
皇甫侯
#7
可能是mysql 8.0版本的原因,OB mysql对标的是mysql 5.6 兼容性。。可以找个mysql 5.6环境看看是不是不报错
远航
#8
我认同你的说法,OB其实是对SQL语法要求更松散了。 但是我们自己的情况确实需要更严格一点。同时开发项目的人员较多,没办法一个个核对SQL语句是否规范,就会可能导致不规范的SQL在开发阶段没暴露出现导致生产环境有问题。
其实就是OB兼容MYSQL有没有一种和MYSQL一致的错误,包括不光兼容了它的“好”还有它的“差”,让它的表现更【接近】MySQL
远航
#9
OB有一个 参数 ob_compatibility_control不知道行不行
ob_compatibility_control
用于控制 MYSQL5.7、 MYSQL8.0 有兼容性冲突时的行为模式。设定 ob_compatibility_control
值为 MYSQL5.7 时,不会影响无行为冲突的 MYSQL8.0 的特性使用。在创建租户时指定兼容模式,且在租户创建后无法修改。
但是遗憾的是创建完租户就没有调整的机会了。
ob_compatibility_control-V4.3.3-OceanBase 数据库文档-分布式数据库使用文档
皇甫侯
#11
哦哦,搜到了这个参数
确实是用来指定兼容的mysql语法是5.7还是8.0,这块其实也是创建mysql租户需要注意的点 
远航
#12
专门下载了一个MySQL5.7。发现跟MySQL8.0的表现是一致的。 子查询不起别名的话都会报错。
这样也正常,如果5.7支持不起别名,而8.0又不支持,就是破坏性的更新了,会可能导致很多现有系统挂掉,处于向下兼容MySQL也不会让8.0做这种破坏改变。
现在都情况是Oceanbase支持了MySQL不支持的写法,导致这个“兼容”出现了松动,就看Oceanbase有没有一种机制能像MySQL更加“靠拢”了。
张雨齐
#14
这种可以通过SQL审核工具,把开发人员sql采集,按照mysql规范审核就可以解决。从数据库底层没有必要吧