如何更正Oracle for Windows中的字符?

时间:2016-05-14 04:29:46

标签: java php oracle diacritics

我认为这是操作系统,因为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

输出形式我的计算机分别为:美国,美国,AL32UTF8

1-教程:

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

SELECT * FROM V$NLS_PARAMETERS

记下NLS_LANG值,格式为[NLS_LANGUAGE]_[NLS_TERRITORY].[NLS_CHARACTERSET]。 例如:American_America.UTF8 对于Windows: 导航到控制面板>单击系统并单击高级选项卡。单击“环境变量”。 在System variables部分中,单击New。 在“变量名称”字段中,输入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,并使用value_ American_America.AL32UTF8更改了NSLANG文件。

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

2 个答案:

答案 0 :(得分:0)

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

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

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

请参阅此答案以获取更多详细信息:OdbcConnection returning Chinese Characters as "?"

答案 1 :(得分:0)

我在OTN(Oracle技术网)上发布了NLS_LANG,这是一个链接。 https://community.oracle.com/thread/3907535?start=0&tstart=0您可能会发现它很有用。

红旗:您为什么要尝试将本地NLS_LANG字符集组件(对于您自己的本地计算机)更改为数据库使用的字符集?如果你想知道Mathguy对这个问题意味着什么?" - 请阅读我链接的笔记,或者如果您有时间和倾向,请阅读原文" - NLS_LANG常见问题http://www.oracle.com/technetwork/products/globalization/nls-lang-099431.html