oracle character set mismatch,EntityFramework查询oracle数据库时报ora-12704: character set mismatch...

1、这段linq,执行期间报ora-12704:character set mismatch错误。

69c5a8ac3fa60e0848d784a6dd461da6.png1 var query = from m inctx.MENU2 where (m.SUPER_MENU_ID ?? "") == (parentMenuId ?? "")3 orderbym.SORT_ID descending4 select new { m.SORT_ID };

69c5a8ac3fa60e0848d784a6dd461da6.png

生成出来的sql如下:

69c5a8ac3fa60e0848d784a6dd461da6.png1 SELECT "Project1"."SORT_ID" AS"SORT_ID"2 FROM(3

4 SELECT "Extent1"."SORT_ID" AS"SORT_ID"5 FROM"BA"."MENU" "Extent1"6 WHERE ((CASE WHEN("Extent1"."SUPER_MENU_ID" IS NULL) THEN ‘‘

7 ELSE "Extent1"."SUPER_MENU_ID" END) =

8 (CASE WHEN(&p__linq__0 IS NULL) THEN ‘‘

9 ELSE &p__linq__0 END))10

11 ) "Project1"12 ORDER BY "Project1"."SORT_ID" DESC

69c5a8ac3fa60e0848d784a6dd461da6.png

但是这条sql单独放到plsql里跑是OK的。

2、改成这样,让生成的sql去掉了里面的case when就OK了。

69c5a8ac3fa60e0848d784a6dd461da6.png1 parentMenuId = parentMenuId ?? "";2 var query = from m inctx.MENU3 where m.SUPER_MENU_ID ==parentMenuId4 orderbym.SORT_ID descending5 select new { m.SORT_ID };

69c5a8ac3fa60e0848d784a6dd461da6.png

生成的sql如下:

69c5a8ac3fa60e0848d784a6dd461da6.png1 SELECT "Project1"."SORT_ID" AS "SORT_ID" FROM(2

3 SELECT "Extent1"."SORT_ID" AS"SORT_ID"4 FROM"BA"."MENU" "Extent1"5 WHERE ("Extent1"."SUPER_MENU_ID" =:p__linq__0)6

7 ) "Project1"8 ORDER BY "Project1"."SORT_ID" DESC

69c5a8ac3fa60e0848d784a6dd461da6.png

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、这个问题只是暂时解决,仍然存疑中,待完善。主要参考这篇:

原文:http://www.cnblogs.com/AlexanderYao/p/3571702.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值