如何更正 Oracle 中 Windows 的字符?

How correct the characters in Oracle for Windows?

我认为是操作系统,因为Java和PHP中的应用程序有同样的问题。 我做了这个程序:

第一名:

我用下一行更改了 NLS_CHARACTERSET:

conn /as sysdba
shutdown immediate;
startup mount;
ALTER SYSTEM ENABLE RESTRIcted session;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
alter database open;
UPDATE PROPS$ SET VALUE$ = 'AL32UTF8' WHERE NAME = 'WE8MSWIN1252';
commit;
shutdown immediate;
startup;

之后
SQL> SELECT * from NLS_DATABASE_PARAMETERS WHERE parameter 
IN ( 'NLS_LANGUAGE', 'NLS_TERRITORY', 'NLS_CHARACTERSET');

PARAMETER VALUE
—————————— —————————————-
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CHARACTERSET AL32UTF8

我的电脑的输出形式是:AMERICAN,AMERICA,AL32UTF8,分别是

1-教程:

确定 NLS_LANG 值。 在数据仓库数据库中,运行命令

SELECT * FROM V$NLS_PARAMETERS

记下 NLS_LANG 值,格式为 [NLS_LANGUAGE]_[NLS_TERRITORY].[NLS_CHARACTERSET]。 例如:American_America.UTF8 对于 Windows: 导航到控制面板 > 系统,然后单击高级选项卡。单击环境变量。 在系统变量部分,单击新建。 在变量名称字段中,输入 NLS_LANG。 在变量值字段中,输入在步骤 1 中返回的 NLS_LANG 值。 NLS_LANG 值的格式应为 [NLS_LANGUAGE]_[NLS_TERRITORY].[NLS_CHARACTERSET]。 例如:American_America.UTF8.

2-教程: 我在 HKEY_LOCAL_MACHINE>SOFWTARE>Oracle>KEY_XE 中输入了一个 REGEDIT 并更改了 NSLANG 文件,值为_ American_America.AL32UTF8.

我重新启动了我的笔记本电脑,但我仍然遇到同样的问题。只是一下子,所有的角色都变成了其他的角色。

按照 Justin Cave 的建议,您应该首先恢复(或处置)您的数据库。另一方面,也许你运气好,因为 UPDATE PROPS$ SET ... WHERE NAME = 'WE8MSWIN1252'; 应该更新 0 行,因为没有名为 WE8MSWIN1252.

的参数

通常根据您的应用程序的特点设置 NLS_LANG 就足够了,在本例中是您的 java and/or PHP 设置。您可以将其作为环境变量或在注册表中执行。但是,我不知道 java 和 PHP 是否读取注册表设置,或者它们是否仅依赖于环境变量。

如果您安装了 32 位 Oracle 客户端,还要检查注册表项 HKEY_LOCAL_MACHINE>SOFWTARE>Wow6432Node>Oracle>KEY_XE -> TNS_ADMIN

查看此答案以获取更多详细信息:

我在 OTN(Oracle 技术网)发布了关于 NLS_LANG 的帖子,这里是 link。 https://community.oracle.com/thread/3907535?start=0&tstart=0 您可能会发现它很有用。

危险信号:您为什么要尝试将本地 NLS_LANG 字符集组件(对于您自己的本地计算机)更改为数据库使用的字符集?如果您想知道 "what the heck that mathguy mean with this question?" - 请阅读我 link 编辑的笔记,或者如果您有时间和兴趣,"original" - NLS_LANG 常见问题解答 http://www.oracle.com/technetwork/products/globalization/nls-lang-099431.html