gpt4 book ai didi

oracle, utf-8, NVARCHAR2,还有很多困惑

转载 作者:行者123 更新时间:2023-12-04 16:01:31 25 4
gpt4 key购买 nike

我在 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)

当我尝试这样做时:
update translation set translation = 'œ' where id = 'MY_ID' And language = 'fr';

然后我运行这个:
select * from translation where id = 'MY_ID' and language = 'fr';

翻译栏显示: 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

这里的问题不是添加 œufs它增加了 ¿ufs

最佳答案

由于您使用的是绑定(bind)变量而不是硬编码文字,因此您应该能够将 Unicode 字符串传递给您的 UPDATE 语句。

如果您使用直接 JDBC 写入数据库,JDBC 开发人员指南中有一个示例,位于 writing data to a NVARCHAR2 column。 .如果您使用的是 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 扩展。

关于oracle, utf-8, NVARCHAR2,还有很多困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6258377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com