我在 RHEL6 上运行 Oracle 数据库 11g。如果没有客户端NLS_LANG,则设置某些utf8字符的长度为2。设置NLS_LANG=AMERICAN_AMERICA.UTF8后,长度仅为1。
如何更改整个数据库的默认 NLG_LANG?我不想只为会话更改这个值,或者像Linux中的环境变量一样。有没有可能将其设置为数据库通用?
SQL> select length('á') from dual;
LENGTH('??')
------------
2
# export NLS_LANG=AMERICAN_AMERICA.UTF8
SQL> select length('á') from dual;
LENGTH('á')
-----------
1
非常感谢您的任何想法
这就是可能发生的情况:
- 您的客户端字符集必须类似于 CP1252 或 ISO-8859-15,而实际上您的客户端实际上使用 UTF8。
- 在此字符集 (UTF8) 中,符号
á
占用两个字节,因此您的客户端发送这两个字节,同时告诉 Oracle 将它们视为 CP1252。在 CP1252 中,两个字符的两个字节代码导致 DB 将输入解释为两个字符,因此length('à')
等于 2(如果插入此字符串,则插入结果不等于à
)
- 当你正确设置字符集时,输入会被oracle正确地视为单个字符,并且其长度为1(仍然是两个字节)。
结论:正确设置你的客户端字符集,否则你会得到翻译错误(这样你不会得到非法字符,但你可能会得到奇怪的符号(¿
).
数据库字符集在创建时设置,通常通过导出/创建空白数据库/导入来更改。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)