客户端和oracle服务器之间的重音字符编码问题

时间:2019-03-25 09:07:00

标签: c# oracle

我有一个Oracle数据库,其NLS_CHARACTERSET为AL32UTF8。 我在NLS_LANG是FRENCH_FRANCE.WE8MSWIN1252的客户端上有一个应用程序(ASP.NET C#)。

带重音符号的字符会很好地显示在应用程序上。 但是,如果WHERE子句中有带重音符号的字符,则oracle不会找到数据,尽管它在那里。

我发现“é”在数据库中写为“ c3a9”。这是在服务器(SqlDeveloper)上完成的,因此可以正常工作,因为字符集之间尚无转换。 accented characters preview

但是,在客户端上的我的应用程序中,带有WHERE子句(包含重音符)的SQL请求不起作用。例如,我有这个要求:

string request = "UPDATE fonction SET libelle = '" + new_libelle.Replace("'", "''") + "' WHERE libelle = '" + old_libelle.Replace("'", "''") + "'";

如果old_libelle中有带重音符号的字符,则oracle找不到数据,因此不会执行更新。

我不能更改数据库的NLS_CHARACTERSET,因为它被许多其他应用程序使用,而且我不希望出现副作用。

该如何解决?

1 个答案:

答案 0 :(得分:0)

在您的网络环境中检查编码设置,例如Response.ContentEncoding和/或Response.Charset

如果设置NLS_LANG=FRENCH_FRANCE.WE8MSWIN1252,则必须设置这些值Encoding.WindowsCodePage(在您的情况下,应为CP-1252)

否则,如果您喜欢Unicode(很可能是UTF-8),则将NLS_LANG相应地设置为FRENCH_FRANCE.AL32UTF8