1

从数据库表中提取数据时,我遇到了字符差异问题。

我已经编写了一个 PL/SQL 代码来从我的 db 表中将一些数据假脱机到 .txt 文件,并使用 unix shell 运行这个 sql 但是当我得到假脱机文件时,结果集是从后面的一个改变的结尾。

例如:

At back end: SADETTÝN

In Spooled txt file :  SADETTŸN 

如果你看这个Y角色,它是一个改变的角色。我想以后端的方式保留所有字符。

我的数据库的字符集:

SELECT * FROM v$nls_parameters WHERE parameter LIKE 'NLS%CHARACTERSET'
PARAMETER              VALUE 
NLS_CHARACTERSET       WE8ISO8859P1 
NLS_NCHAR_CHARACTERSET WE8ISO8859P1 

和 Unix NLS_LANG 参数:

$ echo $NLS_LANG
AMERICAN_AMERICA.WE8ISO8859P1

我尝试将 NLS_LANG 参数更改为 WE8ISO8859P9(土耳其字符集)但没有帮助!

谁能让我知道这个问题的解决方案?

4

2 回答 2

3

我假设您正在尝试使用“vi”或类似的东西来可视化您的文件。NLS_LANG 参数仅由您的数据库用于导出到您的文件。对于您的编辑器(vi),您需要将 LANG 参数设置为相应的值到你的 NLS_LANG。示例:对于 ISO8859P1 美式英语,您必须执行 export LANG=en_US.ISO8859-1 换句话说,您的文件很好,但您的编辑不知道如何处理您的土耳其字符。

于 2012-09-17T12:01:57.350 回答
2

您应该使用 NCHAR 数据类型。更多信息可在 Oracle 文档 -使用 Unicode 的 SQL 和 PL/SQL 编程中获得

对于从 SQL*Plus 进行假脱机,您需要正确设置 NLS_LANG 环境变量。这是stackoverflow中的一个类似问题。

于 2012-09-15T22:19:23.940 回答