首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle Client_charset

Oracle Client_charset
EN

Stack Overflow用户
提问于 2021-01-24 00:12:27
回答 2查看 422关注 0票数 0

我使用19c客户端和数据库的NLS参数,如下所示:

我的客户规格还包括:

当(Windows10 x64)我使用sqplus时,我得到了这个(你可以在命令行的顶部看到我的NLS_LANG环境变量):

我的19c客户端home regedit NLS_LANG变量也设置为AMERICAN_AMERICA.W8ISO8859P9。

然而,当我使用TOAD for Oracle时:

并使用SQL Developer:

我搞糊涂了。在互联网上,他们说NLS_LANG环境变量应该足以设置客户端字符集,但显然不是。

由于这种配置差异,我将“fıtıkçışahap”(在sqlplus上)视为“f‘tät kçŸahap”(在SQL Developer和TOAD for Oracle上)。

我该如何克服这种情况呢?

提前感谢!

编辑:

V$NLS_PARAMETERS

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-25 04:24:26

我的PostgreSQL数据库的编码是tr_TR.UTF8,所以仍然是UTF8。它应该是支持土耳其字符集拉丁语。把它改成tr_TR.iso8859解决了我的问题。

票数 0
EN

Stack Overflow用户

发布于 2021-01-24 03:04:11

忘了SELECT CLIENT_CHARSET FROM V$SESSION_CONNECT_INFO吧,它没有任何意义。

SQL Developer基于Java/JDBC。从Oracle Database 10g开始,NLS_LANG变量不再是JDBC全球化机制的一部分。JDBC驱动程序不检查NLS环境。因此,设置它不会有任何影响。

您的NLS_LANG变量设置为AMERICAN_AMERICA.W8ISO8859P9 -从字符集的角度来看,这意味着什么?

你告诉Oracle数据库:“我的客户使用字符集W8ISO8859P9”(即ISO-8859-9) --不多也不少!

当您运行SQL*Plus时,它将从命令行代码页继承字符集。您可以使用chcp命令查询和修改代码页。我假设它要么是CP857 (如果你运行的是土耳其视窗),要么是CP850CP437 (请参阅National Language Support (NLS) API Reference)。这三个代码页都不匹配ISO-8859-9,因此您的输出是胡言乱语。

在运行SQL之前,请设置相应的代码页,即chcp 28599 (请参阅Code Page Identifiers)

或者,根据您的代码页设置NLS_LANG,例如AMERICAN_AMERICA.TR8PC857 (与SELECT VALUE AS ORACLE_CHARSET, UTL_I18N.MAP_CHARSET(VALUE) AS IANA_NAME FROM V$NLS_VALID_VALUES WHERE PARAMETER = 'CHARACTERSET'核对)

通常TOAD处理字符集非常智能,所以我担心您在TOAD中看到的胡言乱语是数据库中的真实数据,也就是说,它是垃圾数据,因为在插入数据时,您的NLS_LANG值是错误的。

另请参阅OdbcConnection returning Chinese Characters as "?"

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65861426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档