【发布时间】:2011-06-06 21:42:55
【问题描述】:
我在 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
【问题讨论】:
-
数据库的国家字符集是什么?您真的在生成使用硬编码字符串文字的 UPDATE 语句吗?还是您使用绑定变量?如果您使用绑定变量,应用程序是否将传入的数据的数据类型识别为 NVARCHAR2 而不仅仅是 VARCHAR2?
-
AL16UTF16。普通字符集是 WE8ISO8859P1。不,我不会生成使用硬编码字符串文字的更新语句。我试图尽可能地简化这个例子。我们目前使用 s2j,我也尝试使用 springs jdbcTemplate 并得到:'¿ufs'。我不确定 s2j 是否将其识别为 nvarchar2,但它将其返回类型从字符串更改为对象,因此我认为它不会将其视为 varchar2。感谢您的帮助,如果我缺少任何其他信息,请告诉我。
标签: oracle spring utf-8 nvarchar