1、查看当前数据库字符集
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| 02:30:58 SYS@ chicago> select * from nls_database_parameters;
PARAMETER VALUE ------------------------------ -------------------------------------------------------------------------------- NLS_LANGUAGE AMERICAN NLS_TERRITORY AMERICA NLS_CURRENCY $ NLS_ISO_CURRENCY AMERICA NLS_NUMERIC_CHARACTERS ., NLS_CHARACTERSET ZHS16GBK NLS_CALENDAR GREGORIAN NLS_DATE_FORMAT DD-MON-RR NLS_DATE_LANGUAGE AMERICAN NLS_SORT BINARY NLS_TIME_FORMAT HH.MI.SSXFF AM NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR NLS_DUAL_CURRENCY $ NLS_COMP BINARY NLS_LENGTH_SEMANTICS BYTE NLS_NCHAR_CONV_EXCP FALSE NLS_NCHAR_CHARACTERSET AL16UTF16 NLS_RDBMS_VERSION 11.2.0.4.0
20 rows selected.
|
2、查看当前连接终端字符编码是否为gbk,如果不是gbk需要修改,以securecrt为例:
3、如果都是gbk,查询出来的仍为乱码,再次查看环境变量NLS_LANG
1 2
| [oracle@dax-mysql-slave ~]$ echo $NLS_LANG AMERICAN_AMERICA.ZHS16GBK
|
如果为空,或者与数据库字符集不匹配,修改为与数据库相同的字符集
4、 在linux系统LANG环境变量为en_US.UTF-8,其他以上参数都为gbk的情况下,查看带有中文的文本文件会是乱码:
这种情况下在sqlplus执行sql脚本,会报错,
5、要执行脚本,需要修改LANG变量,将该传输修改为gbk
6、重新编辑文本文件
7、在sqlplus下再次执行脚本
脚本执行成功。