解决用中文作为条件查询数据库没结果

解决数据库中文乱码问题(Oracle)

1:当数据库的字符集为西文字符那么用中文作为条件的时候会查不出内容7,可以在中定义一个转码函数,用于字符集转码,如下:

CREATE OR REPLACE Function GB2UNICODE(sInput in varchar2)
Return NVARCHAR2
IS
  --nstr varchar2(512);
	 sTest varchar2(2000);
	 nCount integer;
	 nIdx integer;
	 i integer;
Begin
	 sTest:=rawtohex(utl_raw.cast_to_raw(convert(sInput,'AL16UTF16','ZHS16GBK')));
	 nCount:=length(sTest)/4;
	 for i in 1..nCount loop
	 	 nIdx:=4*(nCount-i);
	 	 sTest:=substr(sTest,1,nIdx)||'\'||substr(sTest,nIdx+1);
	 	 --DBMS_OUTPUT.put_line(sTest);
	 end loop;
	 return unistr(sTest);
	 --return convert(sInput,'AL16UTF16','ZHS16GBK');
	 --nstr:=utl_raw.CAST_TO_VARCHAR2(convert(sInput,'AL16UTF16','ZHS16GBK'));
	 --DBMS_OUTPUT.put_line(nstr);
	 --return '';
End;

然后用中文条件去查询的时候就加上去,使用示例:

select gb2unicode('你好') from dual;

2:还有一个种情况,我们通过程序去查询数据库的时候,用中文条件去查询,可能会查不出内容,但是如果我们把语句放入可视化工具如:plsql、Navicat 就可以查出内容,这个时候有可能就是传输中文时乱码了,通常情况下可以使用转码的方式解决,如:

new String(“你好”.getBytes("GBK"), "ISO_8859_1");

除了这个还有一个解决方案就是可以把中文转为16进制,传输的时候就是用16进制进行传输,然后sql语句中使用函数在把16进制转回来,废话不多说往下看:

public class DataUtils {
   
    private final static Logger logger = LoggerFactory.getLogger(DPlanblockController.class);

    /*
     * 字节数组转16进制字符串
     */
    public static String bytesToHexString(byte[] bArr) {
   
        if (bArr == null) {
   
            return null;
        }
        StringBuffer sb = new StringBuffer(bArr.length);
        String sTmp;

        for (int i = 0; i < bArr.length; i++) {
   
            sTmp = Integer.toHexString(0xFF & bArr[i]);
            if (sTmp.length() < 2) 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值