如何将瑞典语字符插入 NVARCHAR2 Oracle 表列类型?

Posted

技术标签:

【中文标题】如何将瑞典语字符插入 NVARCHAR2 Oracle 表列类型?【英文标题】:How do I insert a Swedish characters into a NVARCHAR2 Oracle table column type? 【发布时间】:2017-02-10 19:37:30 【问题描述】:

我是这样插入的:

insert into s_test values('Länsförsäkringar');

取回这个:

select * from s_test;

L�nsf�rs�kringar

这里 � 是一个替换字符 \003F

期望:

select * from s_test;

Länsförsäkringar

相关的 NLS 参数:

NLS_NCHAR_CHARACTERSET  AL16UTF16
NLS_LANGUAGE    AMERICAN
NLS_TERRITORY   AMERICA
NLS_CHARACTERSET    US7ASCII
NLS_LENGTH_SEMANTICS    BYTE
NLS_RDBMS_VERSION   11.2.0.3.0

表:

CREATE TABLE "S_TEST" 
   (    "COL1" NVARCHAR2(100) ) ;

如何将瑞典语字符插入 Oracle NVARCHAR2 列类型?

【问题讨论】:

【参考方案1】:

使用N

insert into s_test values(N'Länsförsäkringar');

https://docs.oracle.com/database/121/SQLRF/sql_elements003.htm#SQLRF00218

文本字面量或字符串的语法如下:

其中 N 或 n 指定使用国家字符集的文字 (NCHAR 或 NVARCHAR2 数据)。默认情况下,使用此输入的文本 符号被翻译成国家字符集的方式 服务器使用时的数据库字符集。为了避免潜在的 文本文字转换到数据库期间的数据丢失 字符集,设置环境变量 ORA_NCHAR_LITERAL_REPLACE 为真。这样做会在内部透明地替换 n' 并且 为 SQL 处理保留文本文字。

【讨论】:

谢谢你,它在 SQL*Plus 中有效,但在 Java 1.4/JDBC 准备语句中它失败了.. 在java中使用PreparedStatement,它的setString方法自动将unicode java字符串转换为NVarchar 在带有 Weblogic JDBC 的 JDK 1.4 中,我得到替换字符 \003F。 在 1.6 中我可以做到:pstmt.setFormOfUse(1, oracle.jdbc.OraclePreparedStatement.FORM_NCHAR);但不是在 1.4

以上是关于如何将瑞典语字符插入 NVARCHAR2 Oracle 表列类型?的主要内容,如果未能解决你的问题,请参考以下文章

oracle数据库插入特殊字符

CHAR varchar varchar2 nvarchar2

瑞典字符和机器人框架

如何让 Cocoa 明白我的 iPhone 应用程序不是英文的?

Oracle中NVARCHAR2与VARCHAR2的差别

创建表的规范 nvarchar2,varchar2