Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JOOQ非utf8编码问题_Java_Jooq - Fatal编程技术网

Java JOOQ非utf8编码问题

Java JOOQ非utf8编码问题,java,jooq,Java,Jooq,有没有办法指定使用哪种编码从JOOQ生成sql查询?我们有非UTF-8编码的oracle数据库,生成的相等字符串条件查询包含UTF-8字符。默认情况下,jOOQ不涉及绑定变量,它们以您在查询中输入的方式传递给JDBC驱动程序。因此,如果您的Stringbind变量是用UTF-8编码的,那么它们就是这样被发送到数据库的: COMMENTs.TEXT.eq("Schei� encoding"); 如果传递给jOOQ的编码不是您希望在数据库中使用的编码,则至少可以使用以下选项来修复此问题: 修复原始

有没有办法指定使用哪种编码从JOOQ生成sql查询?我们有非UTF-8编码的oracle数据库,生成的相等字符串条件查询包含UTF-8字符。默认情况下,jOOQ不涉及绑定变量,它们以您在查询中输入的方式传递给JDBC驱动程序。因此,如果您的
String
bind变量是用UTF-8编码的,那么它们就是这样被发送到数据库的:

COMMENTs.TEXT.eq("Schei� encoding");
如果传递给jOOQ的编码不是您希望在数据库中使用的编码,则至少可以使用以下选项来修复此问题:

修复原始编码 当然,这应该是你的首要任务。如果UTF-8通常是错误的编码,您应该在应用程序中修复它。例如,您的JVM可能使用错误的默认编码运行,或者您使用错误的编码解析了某些外部源。可以使用JVM标志设置默认编码:

-Dfile.encoding=utf8
在将其传递给jOOQ时修复编码 如果编码只在一到两种情况下出错,可以通过在将字符串传递给jOOQ之前对其进行转换来修复。例如

COMMENTs.TEXT.eq(new String("Schei� encoding".getBytes(), "ISO 8859-1"));
作为一个快速解决方案,这只能偶尔进行

使用jOOQ转换器转换字符串 如果应用程序端编码是正确的,并且您确实希望在将所有字符串值传递到Oracle JDBC之前转换它们,那么可以使用或数据类型将所有字符串从UTF-8转换为您的编码。例如:

public class CharsetConverter implements Converter<String, String> {
    @Override
    public String from(String databaseObject) {
        return databaseObject == null ? null : 
            new String(databaseObject.getBytes(), "UTF-8"));
    }

    @Override
    public String to(String userObject) {
        return userObject == null ? null : 
            new String(userObject.getBytes(), "ISO 8859-1"));
    }

    @Override
    public Class<String> fromType() { return String.class; }

    @Override
    public Class<String> toType() { return String.class; }
}
公共类CharsetConverter实现转换器{
@凌驾
来自(字符串数据库对象)的公共字符串{
返回databaseObject==null?null:
新字符串(databaseObject.getBytes(),“UTF-8”);
}
@凌驾
公共字符串到(字符串用户对象){
返回userObject==null?null:
新字符串(userObject.getBytes(),“ISO 8859-1”);
}
@凌驾
公共类fromType(){return String.Class;}
@凌驾
公共类toType(){return String.Class;}
}

默认情况下,jOOQ不涉及绑定变量-它们以您在查询中输入它们的方式传递给JDBC驱动程序。因此,如果您的
String
bind变量是用UTF-8编码的,那么它们就是这样被发送到数据库的:

COMMENTs.TEXT.eq("Schei� encoding");
如果传递给jOOQ的编码不是您希望在数据库中使用的编码,则至少可以使用以下选项来修复此问题:

修复原始编码 当然,这应该是你的首要任务。如果UTF-8通常是错误的编码,您应该在应用程序中修复它。例如,您的JVM可能使用错误的默认编码运行,或者您使用错误的编码解析了某些外部源。可以使用JVM标志设置默认编码:

-Dfile.encoding=utf8
在将其传递给jOOQ时修复编码 如果编码只在一到两种情况下出错,可以通过在将字符串传递给jOOQ之前对其进行转换来修复。例如

COMMENTs.TEXT.eq(new String("Schei� encoding".getBytes(), "ISO 8859-1"));
作为一个快速解决方案,这只能偶尔进行

使用jOOQ转换器转换字符串 如果应用程序端编码是正确的,并且您确实希望在将所有字符串值传递到Oracle JDBC之前转换它们,那么可以使用或数据类型将所有字符串从UTF-8转换为您的编码。例如:

public class CharsetConverter implements Converter<String, String> {
    @Override
    public String from(String databaseObject) {
        return databaseObject == null ? null : 
            new String(databaseObject.getBytes(), "UTF-8"));
    }

    @Override
    public String to(String userObject) {
        return userObject == null ? null : 
            new String(userObject.getBytes(), "ISO 8859-1"));
    }

    @Override
    public Class<String> fromType() { return String.class; }

    @Override
    public Class<String> toType() { return String.class; }
}
公共类CharsetConverter实现转换器{
@凌驾
来自(字符串数据库对象)的公共字符串{
返回databaseObject==null?null:
新字符串(databaseObject.getBytes(),“UTF-8”);
}
@凌驾
公共字符串到(字符串用户对象){
返回userObject==null?null:
新字符串(userObject.getBytes(),“ISO 8859-1”);
}
@凌驾
公共类fromType(){return String.Class;}
@凌驾
公共类toType(){return String.Class;}
}

您是指SQL字符串(包括字符串文字)还是绑定变量?绑定变量,在输出日志中我们看到UTF8中的值您是指SQL字符串(包括字符串文字)还是绑定变量?绑定变量,在输出日志中我们看到UTF8中的值