使用SELECT语句模糊查询时,查询内容里有中文时通配符不起作用,例如
SELECT * FROM table WHERE 姓名 LIKE '王_军' 这个语句查不到内容 而数据库里是有王大军 这条数据的
要是换成英文字母就没问题了 SELECT * FROM table WHERE 姓名 LIKE 'a_b' 能顺利查到结果。
请问这是什么原因啊,如何才能查中文字符呢?
SELECT * FROM table WHERE 姓名 LIKE '王_军' 这个语句查不到内容 而数据库里是有王大军 这条数据的
要是换成英文字母就没问题了 SELECT * FROM table WHERE 姓名 LIKE 'a_b' 能顺利查到结果。
请问这是什么原因啊,如何才能查中文字符呢?
解决方案 »
- c#读取xmltype字段 报ora-31167错误
- 在建立数据库的时候,怎么设置Date类型的格式?
- 如何从一个表A中中转移一些记录到另外一个表B中 A 中含有blob字段
- 使用B树建立数据库索引,每个节点里面包含的数据记录是什么?单纯一个地址引用还是数据记录完全信息?
- varchr2(40) 与 number类型怎么才能判断是否想等?怎么格式化之后比较?
- 请问如何编写一个类似SQLPLUS的工具,SQLPLUS的功能是如何实现的?
- 这句是什么 意思 ?? 送分
- oracle透明网关问题
- Oracle基础问题,每个30分,3个100分
- 怎么样才能加大日志组大小,增加日志组个数,增加归档的IO速度
- pl/sql 遇到的个小问题
- 触发器问题 向各位求助!
--查看字符集的设置
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
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CHARACTERSET ZHS16GBK
NLS_CALENDAR GREGORIAN请问这个字符集有问题吗,要改成什么
FROM table
WHERE 姓名 LIKE '王_军' 这句是可以查到的,你看看是不是中英文的原因。
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的前端有关系