【发布时间】:2019-07-18 07:30:28
【问题描述】:
我希望我的asp .net应用程序将中文字符存储在WE8MSWIN1252 oracle 12c数据库中,我应该使用哪个oracle客户端而不更改db Charachterset。
我正在使用 windows 服务器,我尝试将注册表中的 nls_lang 设置为中文字符集,但我的应用程序仍然存储字符,如???在数据库中。
【问题讨论】:
标签: asp.net-mvc oracle chinese-locale
我希望我的asp .net应用程序将中文字符存储在WE8MSWIN1252 oracle 12c数据库中,我应该使用哪个oracle客户端而不更改db Charachterset。
我正在使用 windows 服务器,我尝试将注册表中的 nls_lang 设置为中文字符集,但我的应用程序仍然存储字符,如???在数据库中。
【问题讨论】:
标签: asp.net-mvc oracle chinese-locale
简答:
如果您的数据库字符集是WE8MSWIN1252,则不能存储中文字符。设置NLS_LANG 与在数据库中存储字符的能力无关。
长答案:
通常数据库的国家字符集(检查SELECT * FROM V$NLS_PARAMETERS WHERE PARAMETER = 'NLS_NCHAR_CHARACTERSET';)支持完整的Unicode,现在默认应该是AL16UTF16。对要存储汉字的列使用NVARCHAR2、NCHAR、NCLOB数据类型。
解决方法可能是将您的字符串转换为 BASE64 并将它们存储在您的数据库中,请参阅Base64 encoding and decoding in oracle
对于另一种丑陋且非常危险的解决方法,请参阅此:difference between NLS_NCHAR_CHARACTERSET abd NLS_CHARACTERSET for Oracle
【讨论】: