R2DBC DatabaseClient将列名key替换为[*]key致查询错误求解决
R2DBC DatabaseClient.sql中列名'key'被自动替换的解决办法
当使用R2DBC Core的DatabaseClient.sql()方法执行包含key列名的查询时,比如:
Mono<Map<String, Object>> first = db.sql("SELECT key FROM table_a");
实际执行的SQL会被改写为SELECT [*]key FROM table_a,导致查询报错。以下是几个可行的解决办法:
给关键字列名添加数据库专属转义符
不同数据库对关键字的转义方式不同,手动转义后可以避免R2DBC解析器误处理:- MySQL/MariaDB:使用反引号包裹
SELECT `key` FROM table_a - PostgreSQL:使用双引号包裹
SELECT "key" FROM table_a - SQL Server:使用方括号包裹
SELECT [key] FROM table_a
- MySQL/MariaDB:使用反引号包裹
使用列别名规避关键字冲突
给key列设置一个别名,查询时通过别名获取结果,从根源上避开关键字问题:Mono<Map<String, Object>> first = db.sql("SELECT key AS table_key FROM table_a");后续获取结果时使用
table_key作为键名即可。调整R2DBC驱动的SQL解析配置
部分数据库的R2DBC驱动提供了控制SQL自动改写的配置项,可以查看对应驱动的官方文档,找到禁用关键字自动替换的参数并配置,从底层阻止这种改写行为。
内容的提问来源于stack exchange,提问作者smshahiran
相关产品推荐
相关产品推荐

