oracle的userenv和nls_lang详解 1、userenv最常见的使用 userenv函数返回当前会话(session)的相关信息。...再看下windows上NLS_LANG环境变量 ? 最后看下plsql上userenv执行的结果 ?...可以发现在windows上使用plsql的时候语言和地区使用的是plsql的环境变量NLS_LANG。...3、Linux上sqlplus使用userenv 首先看一下NLS_LANG为空的情况下userenv的返回值 ?...NLS_LANG的每一个component都是可选的,如果只想指定NLS_LANG的territory,那么需要这样指定:NLS_LANG=_JAPAN。
最近,好不容易用plsql developer连接上64位oracle了,不过有弹了一个错误: NLS_LANG在客户端不能确定,字符集转变将造成不可预期的后果 ?...我系统注册表有NLS_LANG键值。 看来得添加环境变量了,如下图: ? 添加环境变量后,经过测试,加载成功。 此时,如果操作本地oracle数据库的话,提示肯定是中文的: ? ?...如果你通过本地plsql developer操作远程数据库,提示是英文的话,就得看看远程系统nls_lang变量是什么的了: ?...远程系统nls_lang变量是AMERICAN_AMERICA.ZHS16GBK,所以提示是英文的了: ? 加载成功的结果可以在plsql developer中看到: ?...v$nls_parameters就表示的是本地nls_lang设置了: ?
设置NLS_LANG环境变量 2. 修改SQL*Plus字符集设置 3....设置NLS_LANG环境变量 NLS_LANG是Oracle数据库的一个环境变量,它用于指定字符集和语言环境。正确设置NLS_LANG可以解决SQL*Plus中的中文乱码问题。...您可以按照以下步骤设置NLS_LANG环境变量: 打开命令行终端。...使用以下命令设置NLS_LANG环境变量(请根据您的字符集和语言环境进行相应更改): export NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK 在上述示例中,“...请检查NLS_LANG的设置,确保它的格式正确。
在导出操作时,非常重要的是客户端的字符集设置,也就是客户端的NLS_LANG设置。 NLS_LANG参数由以下部分组成: NLS_LANG=_....SQL> 查看客户端NLS_LANG设置可以使用以下方法: Windows使用: echo %NLS_LANG% 如: E:/>echo %NLS_LANG% AMERICAN_AMERICA.ZHS16GBK...Unix使用: env|grep NLS_LANG 如: /opt/oracle>env|grep NLS_LANG NLS_LANG=AMERICAN_CHINA.ZHS16GBK Windows...导出使用的字符集将会记录在导出文件中,当文件导入时,将会检查导出时使用的字符集设置,如果这个字符集不同于导入客户端的NLS_LANG 设置,字符集将根据导入客户端NLS_LANG设置进行转换,如果必要,...2.源数据库和目标数据库字符集不同 如果我们导出时候使用的NLS_LANG是和源数据库相同的字符集,那么导入时就可以设置客户端NLS_LANG等于导出时使用的字符集,这 样转换只发生在数据库端,而且只发生一次
LANG NLS_LANG=SIMPLIFIED CHINESE_CHINA.AL32UTF8 LANG=zh_CN.UTF-8 SQL> select dump('云') from dual;...,字符集使用ZHS16GBK [oracle@java_1 ~]$ export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK" [oracle@java_1...~]$ env |grep LANG NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK LANG=zh_CN.UTF-8 SQL> select dump('云')...设置 Commonly Used Values for NLS_LANG Table C-1 lists commonly used NLS_LANG values for various operating...system locales: Table C-1 NLS_LANG Parameter Values Operating System Locale NLS_LANG Value
而设置数据库locale最简单的方法就是设置NLS_LANG这个环境参数。在linux中NLS_LANG是一个环境变量,在windows中NLS_LANG是写在注册表中的。...NLS_LANG这个参数由三个组成部分,分别是语言(language), 区域(territory)和字符集(character set),格式如下: NLS_LANG = language_territory.charset...我们平时最常见的就是:AMERICAN_AMERICA.ZHS16GBK和SIMPLIFIED CHINESE_CHINA.ZHS16GBK NLS_LANG的作用官网是这样说的: It sets the...也就是说如果客户端字符集和NLS_LANG中的charset不同,则会乱码。...set NLS_LANG linux查看nls_lang echo $NLS_LANG 5、修改Oracle Client字符集 修改客户端字符集只需要修改上述检查结果中的NLS_LANG即可。
客户端字符集是通过设置NLS_LANG参数来设定的。 1、NLS_LANG参数组成 NLS_LANG参数由以下部分组成: NLS_LANG=_....:oracle]:/oracle>env|grep NLS_LANG NLS_LANG=AMERICAN_AMERICA.ZHS16GBK [ZFLHRDB1:oracle]:/oracle>echo...$NLS_LANG AMERICAN_AMERICA.ZHS16GBK Windows使用echo或set命令查看: C:\Users\lhr>set NLS_LANG NLS_LANG=AMERICAN_CHINA.ZHS16GBK...\lhr>env|grep NLS_LANG NLS_LANG=AMERICAN_CHINA.ZHS16GBK 4、查看Oracle数据库的字符集 数据库字符集在创建数据库时指定,在创建后通常不能更改..." NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8" 设置英文语言环境: NLS_LANG="AMERICAN_AMERICA.ZHS16CGB231280"
在传输过程中,客户端NLS_LANG主要用于进行转换判断。...数据库字符集,在和客户端NLS_LANG不同时,会对经过NLS_LANG转换的字符进一步处理:对于?(即不存在对应关系的字符)直接以?...NLS_LANG字符集与数据库字符集不同 当NLS_LANG字符集与数据库字符集不同,且NLS_LANG不同于客户端字符集设置时,存在以下两种可能。...1、客户端输入的字符在NLS_LANG中没有对应的字符,这时无法转换,NLS_LANG使用替换字符替代这些无法映射的字符(这一步转换在TTS中完成),在很多字符集中这个替代字符就是“?”。...当客户端在WE8ISO8859P15字符集时,输入欧元符号€,这时客户端NLS_LANG和数据库端字符集不同,进行第一次转换,客户端€符号编码是A4,在NLS_LANG转换时,A4对应了NLS_LANG
在传输过程中,客户端NLS_LANG主要用于进行转换判断 如果NLS_LANG等于数据库字符集,则不进行任何转换直接把字符插入数据库 如果不同则进行转换,转换主要有两个任务 如果存在对应关系,则把相应二进制编码经过映射后...数据库字符集,在和客户端NLS_LANG不同时,会把经过NLS_LANG转换的字符进行进一步处理 对于?(即不存在对应关系的字符)直接以?...以下我们来看一下最为常见的字符集及乱码的产生: 1.当NLS_LANG字符集与数据库字符集不同,同时NLS_LANG不同于Server端字符集设置 在这种情况下,存在两种可能: 客户端输入的字符在NLS_LANG...转换时,A4对应了NLS_LANG中的‘¤’,这一步的转换产生了错误映射。...由于数据库字符集不 同于NLS_LANG设置,这时进一步的转换发生了,存入数据库的编码变成了C2A4,虽然同NLS_LANG进行了正确的转换,但是客户端录入的数据已经 损坏或者丢失了。
一、系统字符集显示乱码 1.1 echo $LANG 查看系统字符集 1.2 根据系统字符集,CRT设置对应的字符集编码 二、sqlplus 字符集乱码 2.1 echo $NLS_LANG 查看设置值...2.2 根据系统字符集,设置对应的NLS_LANG变量 一、系统字符集显示乱码 系统输入命令回显中文会显示乱码,表现如下: ``` # df -h 鏂囦欢绯荤粺 瀹归噺 宸茬敤...69114 SQL> 2.1 echo $NLS_LANG 查看设置值 echo NLS_LANG $ 一般是没有设置NLS_LANG变量或者设置的值不正确。...2.2 根据系统字符集,设置对应的NLS_LANG变量 比如,这里系统字符集为utf8,NLS_LANG可以设置为: export NLS_LANG=american_america.utf8...上面设置sqlplus的回显是英文,如果想sqlplus回显为中文,可以设置为: export NLS_LANG="simplified chinese_china.utf8" 此时再次登陆sqlplus
NLS_LANG参数由以下部分组成: NLS_LANG=_....查看客户端NLS_LANG设置可以使用以下方法: · Windows客户端的NLS_LANG设置受注册表参数影响,所以可从注册表中找到当前的参数设置,具体键值位于HKEY_LOCAL_MACHINE\SOFTWARE...如果导出时候使用的NLS_LANG是和源数据库相同的字符集,那么导入时就可以设置客户端NLS_LANG等于导出时使用的字符集,这样转换只发生在数据库端,而且只发生一次。...读取导出文件字符集ID,和导入进程的NLS_LANG进行比较。...来看一个测试,首先设置导入session NLS_LANG为US7ASCII: E:\nls2>set NLS_LANG=AMERICAN_AMERICA.US7ASCII 执行导入操作: E:\nls2
SQL> PLSQL developer设置编码 然后需要修改PLSQL的编码,需要设置一下环境变量 设置为UTF8,需要新增变量NLS_LANG,赋值为:SIMPLIFIED CHINESE_CHINA.AL32UTF8...根据自己需要的编码设置 set NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK set NLS_LANG=SIMPLIFIED CHINESE_CHINA.UTF8...set NLS_LANG=SIMPLIFIED CHINESE_CHINA.US7ASCII 也可以写个bat脚本,现在plsql安装目录下面新建一个bat文件 @echo off color...=2 goto CHINESE_CHINA.US7ASCII if %key%==3 goto CHINESE_CHINA.AL32UTF8 :CHINESE_CHINA.ZHS16GBK set NLS_LANG...goto end :CHINESE_CHINA.AL32UTF8 set NLS_LANG=SIMPLIFIED CHINESE_CHINA.AL32UTF8 goto end :end start
Windows: set NLS_LANG=american_america.AL32UTF8 set NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK Linux:...export NLS_LANG=american_america.AL32UTF8 export NLS_LANG="SIMPLIFIED CHINESE_CHINA".ZHS16GBK 以上为常用客户端字符集
此参数指定数据库的默认语言 参数类型:字符串 语法: NLS_LANGUAGE = language 取值范围:所有有效的语言 默认值: NLS_LANG中得出 通过alter session修改,或者在参数文件中修改...此为基本参数 ---- 其他信息 在LInux系统中,我们一般指定NLS_LANG环境变量(区分大小写),如 NLS_LANG=american_america.al32utf8 其中american...即为默认的NLS_LANGUAGE的值,america为NLS_TERRITORY的值,al32utf8为字符集 注意:客户端NLS_LANG参数会在建立连接的时候覆盖NLS_LANGUAGE参数 NLS_LANG
如果确定数据库只是中国人用(只有中英文相关字符)的话,就采用ZHS16GBK.. sql*plus客户端(设置原则:与所在操作系统字符集一致): windows:一般都是gbk,即chcp结果为936 set NLS_LANG...=american_america.zhs16gbk 语言和地区为中文中国的话,set NLS_LANG=simplified chinese_china.zhs16gbk linux:一般为utf-8...,即echo $LANG 结果为en_US.UTF-8 或zh_CN.UTF-8 export NLS_LANG=american_america.utf8 测试:客户端Linux,系统字符集为zh_CN.UTF...-8 正确设置: export NLS_LANG=american_america.utf8 select dump('靖宇',1016) from dual; insert into t2 values...(1,'靖宇'); commit; 错误设置: export NLS_LANG=american_america.zhs16gbk select dump('靖宇',1016) from dual;
断开、连接 disconn ; conn ww/ww; 关于字符集 操作系统环境变量针对语言项设置有几个,我经常设置的是这两个LANG和NLS_LANG。...LANG是针对Linux系统的语言、地区、字符集的设置,对linux下的应用程序有效,如date; NLS_LANG是针对Oracle语言、地区、字符集的设置,对oracle中的工具有效。...nls_database_parameters WHERE parameter IN ('NLS_LANGUAGE', 'NLS_TERRITORY', 'NLS_CHARACTERSET'); NLS_LANG...的格式如下: NLS_LANG = language_territory.charset Language:指定服务器消息的语言, 影响提示信息是中文还是英文 Territory:指定服务器的日期和数字格式
-11.2.0.3.0\instantclient_11_2)添加到PATH中(注意位于其他Oracle目录之前),增加系统环境变量TNS_ADMIN,系统环境变量ORACLE_HOME,系统环境变量NLS_LANG...instantclient_11_2 TNS_ADMIN=D:\Program Files\instantclient-basic-nt-11.2.0.3.0\instantclient_11_2 NLS_LANG...CHINESE_CHINA.AL32UTF8 注:语言编码要与Oracle服务器设置的一致,可以通过 select userenv('language') from dual; 查询服务器的语言编码; NLS_LANG...language’) from dual; 结果如下:SIMPLIFIED CHINESE_CHINA.ZHS16GBK 2、客户端字符集 在windows平台下,就是系统的环境变量中设置系统环境变量NLS_LANG...还可以在dos窗口里面自己设置,比如: set NLS_LANG =SIMPLIFIED CHINESE_CHINA.ZHS16GBK 这样就只影响这个窗口里面的环境变量。
在运行里面,输入regedit进入注册表,HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb11g_home1\里面(最后一项与实例名、数据库版本有关系),找到NLS_LANG...注意:客户端保证.后面的部分和服务端一致即可) SELECT USERENV('language') FROM DUAL; 但是做完以上操作如果还是乱码,于是查看了一下环境变量,发现里面配置了一个NLS_LANG...Administrator\product\instantclient_10_2 set TNS_ADMIN=C:\app\Administrator\product\instantclient_10_2 set NLS_LANG...=AMERICAN_AMERICA.AL32UTF8 start plsqldev.exe 这时就明白了,该文件中指定的NLS_LANG是AL32UTF8编码,于是将其改成set NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
在正式执行查询前添加: import cx_Oracle import sys import os reload(sys) sys.setdefaultencoding('utf8') os.environ['NLS_LANG...'] = 'SIMPLIFIED CHINESE_CHINA.AL32UTF8' 注意,os.environ['NLS_LANG']应该设为数据库的编码格式。...将os.environ['NLS_LANG']设为该值即可,其他查询照旧
领取专属 10元无门槛券
手把手带您无忧上云