我有一个Oracle数据库,其NLS_CHARACTERSET为AL32UTF8。 我在NLS_LANG是FRENCH_FRANCE.WE8MSWIN1252的客户端上有一个应用程序(ASP.NET C#)。
带重音符号的字符会很好地显示在应用程序上。 但是,如果WHERE子句中有带重音符号的字符,则oracle不会找到数据,尽管它在那里。
我发现“é”在数据库中写为“ c3a9”。这是在服务器(SqlDeveloper)上完成的,因此可以正常工作,因为字符集之间尚无转换。
但是,在客户端上的我的应用程序中,带有WHERE子句(包含重音符)的SQL请求不起作用。例如,我有这个要求:
string request = "UPDATE fonction SET libelle = '" + new_libelle.Replace("'", "''") + "' WHERE libelle = '" + old_libelle.Replace("'", "''") + "'";
如果old_libelle中有带重音符号的字符,则oracle找不到数据,因此不会执行更新。
我不能更改数据库的NLS_CHARACTERSET,因为它被许多其他应用程序使用,而且我不希望出现副作用。
该如何解决?
答案 0 :(得分:0)
在您的网络环境中检查编码设置,例如Response.ContentEncoding
和/或Response.Charset
如果设置NLS_LANG=FRENCH_FRANCE.WE8MSWIN1252
,则必须设置这些值Encoding.WindowsCodePage
(在您的情况下,应为CP-1252)
否则,如果您喜欢Unicode(很可能是UTF-8
),则将NLS_LANG
相应地设置为FRENCH_FRANCE.AL32UTF8