EntityFramework查询oracle数据库时报ora-12704: character set mismatch
1、这段linq,执行期间报ora-12704:character set mismatch错误。
var query = from m in ctx.MENU
where (m.SUPER_MENU_ID ?? "") == (parentMenuId ?? "")
orderby m.SORT_ID descending
select new { m.SORT_ID };
生成出来的sql如下:
SELECT "Project1"."SORT_ID" AS "SORT_ID"
FROM ( SELECT "Extent1"."SORT_ID" AS "SORT_ID"
FROM "BA"."MENU" "Extent1"
WHERE ((CASE WHEN("Extent1"."SUPER_MENU_ID" IS NULL) THEN ''
ELSE "Extent1"."SUPER_MENU_ID" END) =
(CASE WHEN(&p__linq__0 IS NULL) THEN ''
ELSE &p__linq__0 END)) ) "Project1"
ORDER BY "Project1"."SORT_ID" DESC
但是这条sql单独放到plsql里跑是OK的。
2、改成这样,让生成的sql去掉了里面的case when就OK了。
parentMenuId = parentMenuId ?? "";
var query = from m in ctx.MENU
where m.SUPER_MENU_ID == parentMenuId
orderby m.SORT_ID descending
select new { m.SORT_ID };
生成的sql如下:
SELECT "Project1"."SORT_ID" AS "SORT_ID" FROM ( SELECT "Extent1"."SORT_ID" AS "SORT_ID"
FROM "BA"."MENU" "Extent1"
WHERE ("Extent1"."SUPER_MENU_ID" = :p__linq__0) ) "Project1"
ORDER BY "Project1"."SORT_ID" DESC
3、目前的猜测是,ef生成出来的case when有问题,调整linq不生成case when即可。但奇怪的是,同样的sql在plsql里跑居然也是ok的,手工修改客户端的字符集也无法在plsql里重现这个问题,如下:
修改注册表里,HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraClient11g_home2\NLS_LANG,在plsql里客户端使用不同于服务端的字符集,但无法生成同样的错误。
修改前:
NLS_LANG = SIMPLIFIED CHINESE_CHINA.ZHS16GBK
Character Sets
Character size: 2 byte(s)
CharSetID: 852
NCharSetID: 2000
Unicode Support: True
NLS_LANG: SIMPLIFIED CHINESE_CHINA.ZHS16GBK
NLS_CHARACTERSET: ZHS16GBK
NLS_NCHAR_CHARACTERSET: AL16UTF16
修改后:
NLS_LANG = SIMPLIFIED CHINESE_CHINA.AL32UTF8
Character Sets
Character size: 2 byte(s)
CharSetID: 873
NCharSetID: 2000
Unicode Support: True
NLS_LANG: SIMPLIFIED CHINESE_CHINA.AL32UTF8
NLS_CHARACTERSET: ZHS16GBK
NLS_NCHAR_CHARACTERSET: AL16UTF16
4、updated on 2014.06.03,问题有了新的线索,下面这条linq仍然会报同样的错误:
R1 == null ? string.Empty : R1.Emp_ID
但把string.Empty改成""就OK,很怪:
R1 == null ? "" : R1.Emp_ID
5、这个问题只是暂时解决,仍然存疑中,待完善。主要参考这篇:
《ef4 part 8: database agnostic linq to entities》
EntityFramework查询oracle数据库时报ora-12704: character set mismatch的更多相关文章
- 启动Oracle数据库时报错ORA-00119 & ORA-00132
今天启动Oracle数据库时报错ORA-00119 & ORA-00132,找到解决方法做个记录,方便日后查看. 若是ORACLE不提示错误的话,可以自己查看ORACLE的日志文件. Orac ...
- 查询oracle数据库,返回的数据是乱码。 PL/SQL正常。
查询oracle数据库,返回的数据是乱码. PL/SQL正常. 解决方案如下:
- 【转】如何解决plsql查询oracle数据库语句where条件带有中文无法匹配结果
一.问题描述 之前使用PLSQL查询oracle数据库可以正常查询统计结果,由于换了个电脑,重新安装之后,同样的sql查询语句同一个数据库,无法正常查询结果,如下图所示 二.解决办法 1. 查询数据当 ...
- 使用PLSQL Developer和DbVisualizer、SQLDBx查询oracle数据库时出现乱码
使用PLSQL Developer和DbVisualizer查询oracle数据库时,出现查询数据中文乱码情况. 查看了一下数据库编码格式select * from v$nls_parameters; ...
- 查询oracle数据库的数据库名、实例名、ORACLE_SID
数据库名.实例名.数据库域名.全局数据库名.服务名 , 这是几个令很多初学者容易混淆的概念.相信很多初学者都与我一样被标题上这些个概念搞得一头雾水.我们现在就来把它们弄个明白. 一.数据库名 什么是数 ...
- 如何查询oracle数据库中的各种角色
1. 查询oracle中所有用户信息select * from dba_users;2. 只查询用户和密码select username,password from dba_users;3. 查询当前 ...
- 用Navicat连接Oracle数据库时报错ORA-28547:connection to server failed,probable Oracle Net admin error
用Navicat连接Oracle数据库时出现如下错误 上网一查原来是oci.dll版本不对.因为Navicat是通过Oracle客户端连接Oracle服务器的,Oracle的客户端分为两种,一种是标准 ...
- Weblogic页面应用查询oracle数据库后台报错或页面日期格式显示错误
问题:在生产环境中有两台WEB服务器,分别为227和228,部署的应用代码都是每日同步的,两边完全一致,但是某些页面查询数据时,227无结果,并且后台报java数组越界的错误,而228一切正常.经开发 ...
- PL/SQL查询oracle数据库对象
dictionary 全部数据字典表的名称和解释,它有一个同义词dict,dict_column 全部数据字典表里字段名称和解释 如果我们想查询跟索引有关的数据字典时,可以用下面这条SQL语句: se ...
随机推荐
- keepalived的安装和使用
IP配置 管理IP地址 角色 备注 网卡 192.168.1.114 主调度器(Director) 对外提供VIP服务的地址为192.168.1.88 eth1 192.168.1.205 备用调度器 ...
- 一些android系统参数的获取
//获取网络类型 2G/3G/WIFI public String getNetworkType(){ String mNetWorkType = ""; Connectivity ...
- DB2数据库中SQL语句中使用or和and的关键字的时候注意事项
--正确的SQL语句,查询结果:746 ) FROM EHR_BASE EB, EHR_HF_INDICATOR EHI WHERE EB.EHR_ID=EHI.EHR_ID ' ' ' AND EB ...
- icp算法的一些参考资料
1.综述:迭代最近点算法综述,介绍了svd分解和四元数法,其中 svd法:http://blog.csdn.net/kfqcome/article/details/9358853 四元数法:http: ...
- HMM隐马尔科夫模型
这是一个非常重要的模型,凡是学统计学.机器学习.数据挖掘的人都应该彻底搞懂. python包: hmmlearn 0.2.0 https://github.com/hmmlearn/hmmlearn ...
- 编译spock proxy
今天把spock proxy编译通过并且运行了.大家如果在编译这款类似于MySQL proxy的软件遇到问题时,可以联系我.微信onesoft007
- H5网页播放器播不了服务器上的mp4视频文件
打开IIS,在功能视图里找到MIME类型菜单,打开该菜单后鼠标右键添加.mp4扩展名的MIME类型video/mp4 其他视频文件播放不了估计也得在IIS里添加对应的MIME类型(从服务器下载文件时也 ...
- 近期十大优秀jQuery插件推荐
当有限的开发知识限制了设计进展,你无法为自己插上创新的翅膀时,jQuery可以扩展你的视野.本文将推荐从jQuery网站的Plugin频道中推选出的近期十款优秀jQuery插件. 1.jQuery U ...
- Qt之绘制闪烁文本
简述 根据之前的二位绘图,我们可以很轻松的进行文本的绘制,如果需要一些特效,比如:文本闪烁.我们就必须借助其它辅助类来完成. 简述 原理 实现 效果 源码 原理 主要涉及两个辅助类: QFontMet ...
- JavaWeb基础: 学习大纲
JavaWeb基础: Web应用和Web服务器 JavaWeb基础: Tomcat JavaWeb基础:HTTP协议和基于Restful的架构 JavaWeb基础: Web工程配置文件 JavaWeb ...