tes*_*123 6 oracle spring nvarchar utf-8
我在oracle 10g数据库中有以下"翻译"表:
ID  VARCHAR2(100 BYTE)
LANGUAGE    CHAR(2 BYTE)
COUNTRY CHAR(2 BYTE)
TRANSLATION NVARCHAR2(2000 CHAR)
TRACK_TIMESTAMP DATE
TRACK_USER  VARCHAR2(2000 BYTE)
Run Code Online (Sandbox Code Playgroud)
当我尝试这样做时:
update translation set translation = 'œ' where id = 'MY_ID' And language = 'fr';
Run Code Online (Sandbox Code Playgroud)
然后我运行这个:
select * from translation where id = 'MY_ID' and language = 'fr';
Run Code Online (Sandbox Code Playgroud)
翻译栏显示:S而不是,œ我不明白为什么.
由于遗留问题,我无法将整个数据库转换为使用UTF-8,还有其他选择吗?
目前国家字符集是AL16UTF16.普通字符集是WE8ISO8859P1.
我目前正在使用java 1.6
以上是一个简化的例子.以下是我的实际应用程序中的查询:
UPDATE TRANSLATION SET TRANSLATION=? WHERE TRANSLATION.COUNTRY=? and TRANSLATION.ID=? and TRANSLATION.LANGUAGE=? 1=1,800 - 2,500 œufs par heure 2=CA 3=3_XT_FE_ECS18 4=fr
Run Code Online (Sandbox Code Playgroud)
这里的问题是不添加œufs它添加¿ufs
由于您使用的是绑定变量而不是硬编码文字,因此您应该能够将 Unicode 字符串传递到 UPDATE 语句。
如果您直接使用 JDBC 写入数据库,《JDBC 开发人员指南》中有一个有关将数据写入 NVARCHAR2 列的示例。如果您使用的是 1.5 JVM,则必须对每个 NVARCHAR2 列使用 OraclePreparedStatement.setFormOfUse 调用。在 1.6 JVM 中,生活变得更容易,因为 JDBC 4.0 添加了 NCHAR 和 NVARCHAR2 类型。如果您使用的是 1.5 JVM,那么让 Spring 等 ORM 框架使用 Oracle 的 JDBC 扩展可能是一项不小的任务。我对 Spring 不太熟悉,不知道需要采取哪些步骤才能实现这一点。
您或许可以修改连接字符串以指定defaultNChar=true。这将迫使驱动程序使用国家字符集处理所有字符列。这可能足以解决您的问题,而无需让 Spring 使用 OraclePreparedStatement 扩展。
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           5335 次  |  
        
|   最近记录:  |