如何更正 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
我认为是操作系统,因为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