我认为这是操作系统,因为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文件。
我重新启动笔记本电脑,但仍然遇到同样的问题。只是在一次中,所有角色都变成了其他角色。
答案 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