来自Oracle表的UTF 8

时间:2008-12-10 09:47:51

标签: oracle

客户端要求将许多表提取到csv中,所有这些都没有问题。他们刚刚要求我们确保文件始终采用UTF 8格式。

我如何检查实际情况。或者甚至更好地强迫它如此,是否可以在运行查询之前在程序中设置它?

数据从Oracle 10g数据库中提取。

我应该检查什么?

由于

4 个答案:

答案 0 :(得分:5)

您可以使用以下查询检查数据库字符集:

select value from nls_database_parameters 
where parameter='NLS_CHARACTERSET'

如果它显示AL32UTF8,那么您的数据库格式就是您需要的格式,如果导出不会影响它,那么您就完成了。

您可以阅读有关上述NLS参数的Oracle全球化支持herehere

答案 1 :(得分:1)

您是如何准确生成CSV文件的?根据具体的架构,会有不同的答案。

例如,如果您使用SQL * Plus提取数据,则需要将客户端计算机上的NLS_LANG设置为适当的值(即AMERICAN_AMERICA.AL32UTF8)以强制发送数据到UTF-8的客户机。如果您使用其他方法,NLS_LANG可能重要,也可能不重要。

答案 2 :(得分:0)

你必须要找的是hte输入中的8位ascii字符(如果有的话)被翻译成双字节utf-8字符。

这在很大程度上取决于您的本地ASCII代码页,但通常: - ASCII“£”应该是ascii中的x'A3',在utf-8中神奇地变成x'C2A3'。

答案 3 :(得分:0)

好吧,这并不像我最初希望的那么简单。上面的查询返回AL32UTF8。

我使用在数据库上编译的存储过程循环遍历存储过程内数组中保存的表名列表。

我使用DBMS_SQL包来构建SQL,并使用UTL_FILE.PUT_NCHAR将数据插入到文本文件中。

我相信然后我的结果输出将是UTF 8,但是在Textpad中打开它表示它是ANSI并且数据在某些地方出现乱码:)

干杯

NLS_CHARACTERSET是AL32UTF8并且NLS_NCHAR_CHARACTERSET是AL16UTF16

可能很重要