当我在 Windows 中插入来自 sql Developer 的 Windows-1252 (80-9F) 控制字符时,它们会正确插入到 oracle db 中。
但是当我在Linux服务器中使用sqlplus
时,控制字符在同一个数据库中插入为�。
例如,当我在linux服务器sqlplus中执行以下语句时,
insert into demo values ('“a”');
我将以下输出插入到数据库中:
�a�
对于其他控制字符也会发生同样的情况,例如 Œ、Ž、Š、<
等。
我的区域设置:
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
有人可以帮助我吗?
您的 Linux 机器使用 UTF-8 (LANG=en_US.UTF-8
),因此您需要告诉 SQL*Plus 您键入的所有内容都使用该编码。这样做的方法(据我所知 the only way to do so )是创建 NLS_LANG
环境变量并将其指定为 UTF-8 的 Oracle 代码 - 我在 Google 搜索到的文档中发现了两个不同的值:
NLS_LANG=American_America.UTF8
NLS_LANG=AMERICAN_AMERICA.AL32UTF8
Oracle Database Client Globalization Support并没有说明这个主题,但我一直使用 AMERICAN_AMERICA.AL32UTF8
。
我是一名优秀的程序员,十分优秀!