【YOU学吧战“疫”特刊】NC数据乱码勿惊慌,疫期服务“强心剂”来了!疫情当前,系统乱码,有人慌了。近期,当你打开NC系统界面部分功能显示“????”,在exp/imp数据时出现“????”,或出现EXP-00091报错,你是否惊慌了?担心系统被“感染”,或是出现其他疑难杂症?别担心,用友技术专家给你带来“强心剂“,助你疫期也能高效解决系统难题!客户端字符集导致的乱码或报错问题解决方案Part1问题现象某企业NC65补丁更新后,节点名称显示乱码,如图:我们获取到的主要的信息如下:1)现场环境是orcle11g数据库2)检查表sm_funcregister\sm_menuitemreg中,节点名称fun_name显示的都是????3)菜单项名称显示的也都是????4)手工修改后,再次保存还是????Part2解决方案(一)了解几个概念字符集(Characterset):是一个系统支持的所有抽象字符的集合。字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。常见的字符集有ASCII,ZHS16GB231280,ZHS16GBK等。字符编码(CharacterEncoding):是一套法则,使用该法则能够对自然语言的字符的一个集合(如字母表或音节表),与其它的一个集合(如电脑编码)进行配对。即在符号集合与数字系统之间建立对应关系。与字符集相对应,常见的字符编码有:ASCii,ZHS16GBK,ZHT16BIG5,ZHS32GB18030等。字符集的定义其实就是字符的集合,而字符编码则是指怎么将这些字符变成字节用于保存、读取和传输。万国码(Unicode):包含了几乎人类所有可用的字符,每年还在不断的增加,可以看作是一种通用的字符集。它将全世界所有的字符统一化,统一编码,不会再出现字符不兼容和字符转换的问题。它有以下三种编码方式:1.UTF-32编码:固定使用4个字节来表示一个字符,存在空间利用效率的问题。2.UTF-16编码:对相对常用的60000余个字符使用两个字节进行编码,其余的使用4字节。3.UTF-8编码:兼容ASCII编码;拉丁文、希腊文等使用两个字节;包括汉字在内的其它常用字符使用三个字节;剩下的极少使用的字符使用四个字节。客户端字符集(NLS_LANG参数):客户端字符集定义了客户端字符数据的编码方式,任何发自或发往客户端的字符数据均使用客户端定义的字符集编码,客户端可以看作是能与数据库直接连接的各种应用,例如sqlplus,exp/imp等。客户端字符集是通过设置NLS_LANG参数来设定的。(二)问题分析与解决客户端字符集和服务端字符集不一致时容易出现乱码,正常的做法是客户端字符集和服务端的字符集保持一致。1.查询oracleserver端的字符集有很多种方法可以查出oracleserver端的字符集,比较直观的查询方法是以下这种:方法一:SQL>selectuserenv('language')fromdual;USERENV('LANGUAGE')----------------------------------------------------SIMPLIFIEDCHINESE_CHINA.ZHS16GBK方法二:SQL>select*fromv$nls_parameterswhereparameter='NLS_CHARACTERSET';PARAMETERVALUE-----------------------------------------------------------------NLS_CHARACTERSETZHS16GBK2.查询oracleclient端的字符集在windows平台下,就是注册表里面相应OracleHome的NLS_LANG。还可以在dos窗口里面自己设置,比如:setnls_lang=AMERICAN_AMERICA.ZHS16GBK这样就只影响这个窗口里面的环境变量。或者如下:在unix平台下,就是环境变量NLS_LANG。$echo$NLS_LANGAMERICAN_AMERICA.ZHS16GBKOracle字符集转换的基本原则:1)设置客户端的NLS_LANG为客户端操作系统的字符集2)如果数据库字符集等于NLS_LANG,数据库和客户端传输字符时不作任何转换3)如果它们俩不等,则需要在不同字符集间转换,只有客户端操作系统字符集是数据库字符集子集的基础上才能正确转换,否则会出现乱码。(三)举一反三某企业数据库迁移设置备份,报错如下:即将导出NC633的表通过直接路径.正在导出表AAM_APPASSET导出了22337行EXP-00091:正在导出有问题的统计信息。EXP-00091:正在导出有问题的统计信息。..正在导出表AAM_APPASSETVERSION导出了0行也是客户端字符集(NLS_LANG)和服务端字符集不一致的报错EXP-00091,通过设置客户端字符集字符集(NLS_LANG)和服务端字符集一致后解决问题。【重磅预告】疫情当前,系统乱码,别慌疫期服务“强心剂”之NC数据乱码“防疫”来了3月12日10:00-15:00用友技术专家在线实时互动为你解答NC系统乱码难题你遇到的、你关心的、你疑惑的任何难题都可以来用友服务社区http://ism.yonyou.com/寻找答案我们不见不散