Java 查询 varbinary(64) 列的字符串
Java string to query a varbinary(64) column
对于单元测试,我需要在 MySQL table 中查询 varbinary(64) 列中的特定值。使用 jooq 从 csv 加载数据。
VARBIN_VALS,...
0001,...
0002,...
加载测试数据后,当我在 table 上 select 时,我看到值 0001。我想找到 VARBIN_VALS 0001 的记录,所以我试图从 java 字符串构造字节数组。我尝试了几种变体:
"0001".getBytes()
"0001".getBytes(StandardCharsets.UTF_8)
"0001".getBytes(Charsets.UTF_16)
但没有任何匹配项。据我所知 mysql 正在使用 utf8mb4。如何将 java 字符串转换为与 jooq 匹配的字节数组?
加载的测试数据:
ContextObject.loadInto(TABLE_A).
loadCSV(SourceFile).fields(...).execute();
查询是:
ctx.select(TABLE_A.FIELD_OF_INTEREST).
from(TABLE_A).
where(TABLE_A.VARBIN_FIELD.eq(bytesArray)).
fetch(TABLE_A.FIELD_OF_INTEREST);
尝试
byte[] varBinary = "0001".getBytes(StandardCharsets.UTF_8);
我认为这里发生的事情是:如果您的专栏是某种 byte[]
类型(例如 VARBINARY
),那么 Loader
API 将尝试解码 base64编码二进制数据,参见 https://github.com/jOOQ/jOOQ/issues/5858
在所有二进制字符串表示中,这似乎是最受欢迎的一种,但它可能不是您所期望的。您期望 jOOQ 将 String
直接传递给 JDBC 驱动程序。
在不久的将来可能会实现针对任意字符串编码的彻底解决方案,请参阅:https://github.com/jOOQ/jOOQ/issues/3221,您可以在其中定义显式 String
以在从 CSV 加载数据时自定义类型转换(或 JSON, 等等)
到此为止,我想问题就清楚了?现在,您应该:
- 将 base64 编码的二进制数据放入 CSV 中
- Pre-process 你的 CSV 并将二进制数据传递给
Object[]
或 Record
表示,然后加载它,而不是
对于单元测试,我需要在 MySQL table 中查询 varbinary(64) 列中的特定值。使用 jooq 从 csv 加载数据。
VARBIN_VALS,...
0001,...
0002,...
加载测试数据后,当我在 table 上 select 时,我看到值 0001。我想找到 VARBIN_VALS 0001 的记录,所以我试图从 java 字符串构造字节数组。我尝试了几种变体:
"0001".getBytes()
"0001".getBytes(StandardCharsets.UTF_8)
"0001".getBytes(Charsets.UTF_16)
但没有任何匹配项。据我所知 mysql 正在使用 utf8mb4。如何将 java 字符串转换为与 jooq 匹配的字节数组?
加载的测试数据:
ContextObject.loadInto(TABLE_A).
loadCSV(SourceFile).fields(...).execute();
查询是:
ctx.select(TABLE_A.FIELD_OF_INTEREST).
from(TABLE_A).
where(TABLE_A.VARBIN_FIELD.eq(bytesArray)).
fetch(TABLE_A.FIELD_OF_INTEREST);
尝试
byte[] varBinary = "0001".getBytes(StandardCharsets.UTF_8);
我认为这里发生的事情是:如果您的专栏是某种 byte[]
类型(例如 VARBINARY
),那么 Loader
API 将尝试解码 base64编码二进制数据,参见 https://github.com/jOOQ/jOOQ/issues/5858
在所有二进制字符串表示中,这似乎是最受欢迎的一种,但它可能不是您所期望的。您期望 jOOQ 将 String
直接传递给 JDBC 驱动程序。
在不久的将来可能会实现针对任意字符串编码的彻底解决方案,请参阅:https://github.com/jOOQ/jOOQ/issues/3221,您可以在其中定义显式 String
以在从 CSV 加载数据时自定义类型转换(或 JSON, 等等)
到此为止,我想问题就清楚了?现在,您应该:
- 将 base64 编码的二进制数据放入 CSV 中
- Pre-process 你的 CSV 并将二进制数据传递给
Object[]
或Record
表示,然后加载它,而不是