题如何使用jOOQ创建以下两个(等效的)MySQL语句中的任何一个?SELECT * FROM `tbl` WHERE `col` = BINARY foobar ;SELECT * FROM `tbl` WHERE `col` = CAST(foobar AS BINARY);背景我想比较任意字符串,可...
                
题
如何使用jOOQ创建以下两个(等效的)MySQL语句中的任何一个?
SELECT * FROM `tbl` WHERE `col` = BINARY 'foobar   ';
SELECT * FROM `tbl` WHERE `col` = CAST('foobar   ' AS BINARY);
背景
我想比较任意字符串,可能包括(重要的)尾随空格.不幸的是,在与=比较时,MySQL默认忽略尾随空格.据我所知,从this question开始,这种比较只能使用the BINARY operator in MySQL.
我已经尝试过了
我试过使用DSL.cast() method in jOOQ:
myDb.selectFrom(TBL)
  .where(TBL.COL
     .eq(DSL.cast("foobar   ", MySQLDataType.BINARY)))
  .fetchOne();
// → compiler error: “The method eq(String) in the type Field<String> is not
//   applicable for the arguments (Field<byte[]>)”
myDb.selectFrom(TBL)
  .where(DSL.cast(TBL.COL, MySQLDataType.BINARY)
     .eq("foobar   "))
  .fetchOne();
// → compiler error: “The method eq(byte[]) in the type Field<byte[]> is not
//   applicable for the arguments”
myDb.selectFrom(TBL)
  .where(DSL.cast(TBL.COL, MySQLDataType.BINARY)
     .eq(DSL.cast("foobar   ", MySQLDataType.BINARY)))
  .fetchOne();
// → runtime error: “org.jooq.exception.DataTypeException: Cannot convert from
//   foobar    (class java.lang.String) to class [B”
解决方法
我的最后一招是将我的查询更改为使用LIKE而不是=.但是,这应该是一个黑客,因为我必须首先在我的字符串中引用任何通配符,我也将面临性能损失: – |
解决方法:
你的第三个例子应该工作,可能是一个bug,我注册为Issue #3255:
myDb.selectFrom(TBL)
  .where(DSL.cast(TBL.COL, MySQLDataType.BINARY)
     .eq(DSL.cast("foobar   ", MySQLDataType.BINARY)))
  .fetchOne();
与往常一样,如果您在jOOQ中缺少某个功能,或者您遇到了错误,则可以使用此处记录的纯SQL:
> http://www.jooq.org/doc/latest/manual/sql-building/plain-sql/
解决问题的一个例子在你的情况下:
myDb.selectFrom(TBL)
  .where(TBL.COL
     .eq(DSL.field("BINARY ?", String.class, "foobar   ")))
  .fetchOne();
要么:
myDb.selectFrom(TBL)
  .where("{0} = BINARY {1}", TBL.COL, DSL.val("foobar   "))
  .fetchOne();
 
本文标题为:java – jOOQ:如何使用MySQL“BINARY”运算符创建选择查询?
				
        
 
            
        - Java通过动态规划设计股票买卖最佳时机 2023-06-17
 - java数据库连接检索 2023-11-03
 - Quarkus中ConfigSourceInterceptor的加密配置实现 2022-10-24
 - Spring 循环依赖之AOP实现详情 2023-02-19
 - Spring的@Value如何从Nacos配置中心获取值并自动刷新 2023-02-27
 - Java类加载器ClassLoader源码层面分析讲解 2023-06-02
 - Java通过底层原码了解数组拷贝 2023-03-06
 - Spring源码解析容器初始化构造方法 2023-02-19
 - Java实现图片验证码功能 2023-05-08
 - Spring Cloud Stream消息驱动组件使用方法介绍 2023-05-08
 
						
						
						
						
						
				
				
				
				