Oracle 从数据库返回时,字符串会附加特殊字符

Oracle 从数据库返回时,字符串会附加特殊字符,oracle,nhibernate,Oracle,Nhibernate,我正在使用NHibernate查询Oracle 8i数据库。问题是返回的对象中的所有字符串都用特殊字符进行了后缀。例如 CUSTOMER,ONE������� nhibernate字段类型为AnsiString,Oracle数据类型为CHAR(20),字符集为CHAR_CS。我对Oracle一无所知:((20)表示字段根据需要填充,长度正好为20个字符。填充字符为空白 如果填充字符显示为问号,则字符集设置中一定有问题。您可能会发现有关问题的更多信息 这里需要的是修剪返回的字符串,或者更好地移到

我正在使用NHibernate查询Oracle 8i数据库。问题是返回的对象中的所有字符串都用特殊字符进行了后缀。例如

CUSTOMER,ONE�������
nhibernate字段类型为AnsiString,Oracle数据类型为CHAR(20),字符集为CHAR_CS。我对Oracle一无所知:(

(20)表示字段根据需要填充,长度正好为20个字符。填充字符为空白

如果填充字符显示为问号,则字符集设置中一定有问题。您可能会发现有关问题的更多信息


这里需要的是修剪返回的字符串,或者更好地移到(20).

我无法找到解决此问题的适当解决方案,但将nhibernate驱动程序从“OracleClientDriver”更改为“OleDbDriver”解决了此问题。不过,如果有人知道如何正确解决此问题,请告诉我,因为我不喜欢使用OldDbDriver访问Oracle,因为可能存在兼容性问题。

是的。我通常坚持使用VARCHAR,除非我知道某些东西是固定长度的,比如3个字符的货币代码。这是唯一的解决方案吗?在使用前修剪所有字符串,特别是使用databinding.Nope会非常痛苦。除非你可以自己查询并在每个字符字段上添加修剪。VARCHAR2确实是你想要的类型,不是吗CHAR.我刚刚通过ADO.NET(OleDbConnection)直接查询了数据库,它工作得很好。最后没有特殊字符。为什么?:(我很确定您仍然在填充字符串,但使用的是真正的空格而不是无效字符。要解决字符集问题,我们需要有关服务器设置的更多信息(“从nls_database_parameters中选择*,其中参数为('nls_CHARACTERSET','nls_NCHAR_CHARACTERSET'))以及您的客户端设置(版本、注册表项HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMEID\nls_LANG)。。。