在Oracle中的Nvarchar列中存储值的问题

时间:2017-03-27 12:30:30

标签: oracle character-encoding

我在oracle中有一个带有NVarchar列的表。当我插入下面的值时,它会转换为其他一些字符。

Insert INTO tbltest (CONTENT) Values(N'✓ à la mode δ')
Select * From tbltest

CONTENT
--------------------
¿ à la mode d 

那么我应该采用什么数据类型来保存这种类型的数据。请建议。

2 个答案:

答案 0 :(得分:0)

对于SQL Developer,我不知道确切的解决方案,但检查工具中的设置 - >偏好 - >环境 - >编码

选择支持您的字符的编码,例如UTF-8

关于您的C#代码:

多年来,

适用于Oracle的Microsoft .NET Framework数据提供程序deprecated,您不应在新项目中使用它。我认为开发在20年前停止了,因此它不支持Unicode字符 - 你不能使用它。

使用现代提供商,例如“Oracle Data Provider for .NET(ODP.NET)”,您可以从这里下载它:Oracle Data Access Components (ODAC) for Windows Downloads

对于“Oracle Data Provider for .NET”,您必须将NLS_LANG设置为支持这些字符的编码,例如.AL32UTF8。您可以将NLS_LANG设置为环境变量,也可以将HKLM\SOFTWARE\Wow6432Node\ORACLE\KEY_%ORACLE_HOME_NAME%\NLS_LANG设置为HKLM\SOFTWARE\ORACLE\KEY_%ORACLE_HOME_NAME%\NLS_LANG(32位)。 ODP.NET Managed Driver(64位)。

其他提供商(例如OraOLEDB或Oracle const routes: Routes = [ { path: 'path1', loadChildren: 'app/modules/path1/path1.module#Path1Module', canLoad: [AuthenticatedGuard] }, { path: 'path2', loadChildren: 'app/modules/path2/path2.module#Path2Module', canLoad: [AuthenticatedGuard] }, . . . { path: 'login', loadChildren: 'app/modules/login/login.module#LoginModule', canLoad: [NotAuthenticatedGuard] }, { path: '', redirectTo: '/defaultPath', pathMatch: 'full' }, { path: '**', component: PageNotFoundComponent, pathMatch: 'full', canActivate: [AuthenticatedGuard] }]; )对NLS_LANG不敏感。

在此处查看更多信息:OdbcConnection returning Chinese Characters as "?"

答案 1 :(得分:-1)


这是因为您的NLS_CHARACTERSET,NLS_NCHAR_CHARACTERSET数据库设置和NLS_LANG设置是您所看到的客户端。

由于您的值具有特定于您的语言的特殊字符,因此您需要设置该值。如下所示