SQL*Plus乱码的根本原因是客户端字符集与数据库字符集不匹配。NLS_LANG环境变量用于指定客户端的语言、地域及字符集,需将其设置为与数据库一致的字符集(如UTF-8)。
.bashrc文件(或系统级/etc/profile),在末尾添加以下内容(以UTF-8为例):export NLS_LANG="AMERICAN_AMERICA.UTF8"
保存后执行source ~/.bashrc使配置生效。SELECT value FROM nls_session_parameters WHERE parameter = 'NLS_CHARACTERSET';
若不一致,可通过ALTER SESSION SET NLS_CHARACTERSET=<数据库字符集>临时调整(如ALTER SESSION SET NLS_CHARACTERSET='UTF8')。Debian默认的SQL*Plus不支持方向键(上下键会显示为^[[A等乱码),rlwrap工具可为其添加readline功能,使方向键、历史命令回查等操作恢复正常。
rlwrap:sudo apt install rlwrap
为简化每次输入,可将rlwrap sqlplus设为别名:echo "alias sqlplus='rlwrap sqlplus'" >> ~/.bashrc
source ~/.bashrc
此后直接输入sqlplus即可使用方向键。若上述方法无效,需确认数据库本身的字符集是否正确(如是否为UTF-8)。
SELECT value FROM nls_database_parameters WHERE parameter = 'NLS_CHARACTERSET';
若字符集不是UTF-8且需修改(需谨慎,可能影响现有数据),可使用ALTER DATABASE CHARACTER SET utf8;命令(需重启数据库生效)。确保Debian终端的字符集与NLS_LANG一致:
UTF-8;xterm-256color,“Character set translation”为UTF-8。NLS_LANG环境变量解决字符集问题,这是最根本的解决方式;NLS_LANG为客户端与数据库都能支持的字符集(如AMERICAN_AMERICA.AL32UTF8);rlwrap后,SQL*Plus的方向键和历史命令功能将恢复正常,提升使用体验。