我需要从一台服务器导出Oracle数据库,然后在另一台服务器上导入它。但我从一开始就收到了以下信息:
连接到:OracleDatabase10g发行版10.2.0.4.0-64位在US7ASCII字符集中完成输出,AL16UTF16 NCHAR字符集服务器使用UTF8字符集(可能的字符集转换)
虽然导出仍然在没有警告的情况下成功终止,但我想知道数据库中的数据是否仍然正确。是否需要设置NLS_LANG变量以匹配服务器的字符集(在本例中为UTF-8)?
如果我将NLS_LANG变量设置为UTF-8,则不会收到此信息消息。但是,我导入数据库的目标服务器再次显示如下:
导入在UTF8字符集中完成,AL16UTF16 NCHAR字符集导入服务器使用AL32UTF8字符集(可能的字符集转换)
如果我理解正确的话,这两个服务器使用(稍微)不同的字符集- UTF-8和AL32UTF8。
我对应该设置什么NLS_LANG变量,甚至是否有必要设置它感到困惑。我应该使用AL32UTF8作为NLS_LANG进行导出和导入吗?
编辑:如果这些信息很重要:我使用的是SUSE,对于导出,我使用Oracle附带的命令exp。
发布于 2016-01-05 07:44:02
Oracle使用NLS_LANG参数在客户端和数据库之间进行字符转换。这样,客户端就可以以“正确”的方式显示数据库中的所有字符。
在进行导出时,您的NLS_LANG应该与数据库的字符集匹配。如果您在US7ASCII中导出UTF-8数据库,那么当您将这些数据导入数据库时,可能会出现松散信息的风险。为什么?与US7ASCII相比,UTF-8字符集可以容纳更多不同的字符.“未知”字符被单个字符替换。在过去,我看到这种情况发生,我们失去了所有的人物口音。它们被“?”取代。如果我还记得的话。
如果导入,则必须确保将NLS_LANG设置为导入文件的值。然后,Oracle将对您导入的数据库的字符集进行映射。
https://dba.stackexchange.com/questions/125208
复制相似问题