使用SELECT语句模糊查询时,查询内容里有中文时通配符不起作用,例如
SELECT * FROM table WHERE 姓名 LIKE '王_军' 这个语句查不到内容   而数据库里是有王大军 这条数据的
要是换成英文字母就没问题了 SELECT * FROM table WHERE 姓名 LIKE 'a_b' 能顺利查到结果。
请问这是什么原因啊,如何才能查中文字符呢?

解决方案 »

  1.   

    我的数据库可以,你的数据库字符集不是SIMPLIFIED CHINESE_CHINA.ZHS16GBK的吧
      

  2.   

    请问字符集如何设置? Oracle数据库安装以后默认的数据库字符集是什么啊?
      

  3.   

    SELECT * FROM table WHERE 姓名 LIKE 'a%_%b%' 这样行么?
      

  4.   


    --查看字符集的设置
    SQL> select * from nls_database_parameters;PARAMETER                      VALUE
    ------------------------------ ----------------------------------------
    NLS_LANGUAGE                   AMERICAN
    NLS_TERRITORY                  AMERICA
    NLS_CURRENCY                   $
    NLS_ISO_CURRENCY               AMERICA
    NLS_NUMERIC_CHARACTERS         .,
    NLS_CHARACTERSET               WE8ISO8859P1
    8i以上版本可以通过alter database来修改字符集,但也只限于子集到超集,不建议修改props$表,将可能导致严重错误。
      
      Startup nomount;
      Alter database mount exclusive;
      Alter system enable restricted session;
      Alter system set job_queue_process=0;
      Alter database open;
      Alter database character set zhs16gbk
      

  5.   

    SQL> select * from nls_database_parameters;
    NLS_LANGUAGE AMERICAN
    NLS_TERRITORY AMERICA
    NLS_CURRENCY $
    NLS_ISO_CURRENCY AMERICA
    NLS_NUMERIC_CHARACTERS .,
    NLS_CHARACTERSET ZHS16GBK
    NLS_CALENDAR GREGORIAN请问这个字符集有问题吗,要改成什么
      

  6.   

    SELECT * 
    FROM table 
    WHERE 姓名 LIKE '王_军' 这句是可以查到的,你看看是不是中英文的原因。
      

  7.   

    这绝对不是数据库的原因!
    SELECT * FROM table WHERE 姓名 LIKE '王_军' ?你确定有王大军??如果你在plsql developer或sqlplus中查,90%不会出错,因为_就是一个字符位置,和字符集狗p关系都没有。如果你是java之类的前端程序中查的,可以检查是不是乱码了。通过select sql_text from v$sql where sql_text like '%table%';查下到底执行的是什么语句。我怀疑你就是别的程序执行的,而不是直接通过数据库客户端比如plsql developer或sqlplus执行的。说不清楚嘛基本上可以排除字符集的原因,就算字符集的原因也和数据库没有关系,和你调用这个sql的前端有关系
      

  8.   

    SELECT * FROM table WHERE 姓名 LIKE '王%军';这样就行了
      

  9.   

    王大军出名了,呵呵,我想是字符集不对,不知道是不是中文字符集,如果是American,应该要加两个下划线,因为占两个字节。不过我建议类似这种还是 % 搞定了吧,你非要中间查一个字的啊,呵呵
      

  10.   

    select * from table_name where name like '王%军'  ;还是这么写吧  你确定表中王大军 名字之间没有空格么?