【发布时间】:2018-11-20 06:55:31
【问题描述】:
我有一个带有
的 oracle 数据库NLS_CHARACTERSET=AL32UTF8
sqlplus nls_lang is WE8ISO8859P1
unix shell 也是 iso
varchar2 列有字母:LATIN SMALL LETTER O WITH ACUTE
当我在此列上调用 DUMP 函数时,我得到:
Typ=1 Len=4: 195,131,194,179
这看起来不像 UTF8。
运行 SELECT 会在屏幕上显示损坏的 cha。
运行 CONVERT(VALUE, 'WE8ISO8859P1', 'UTF8') - 显示正确的值,但编码看起来不像 UTF8...
如果我尝试手动插入相同的字母,则选择查询会返回正确的字符。
转储显示 195,179,这是正确的 UTF8 代码。
运行 CONVERT(VALUE, 'WE8ISO8859P1', 'UTF8') - 失败
ORA-29275: 部分多字节字符
这很奇怪,因为 195,179 确实是 UTF8。
请向我澄清以上内容。
【问题讨论】:
-
你从
DUMP(..., 1016)得到什么? -
CONVERT(VALUE, 'UTF8', 'WE8ISO8859P1')是错误的,即这意味着“Convert fromWE8ISO8859P1toUTF8” - 但是,您的值已经是 UTF -8 根据NLS_CHARACTERSET -
对于已经存在的值,我得到:Typ=1 Len=4 CharacterSet=AL32UTF8: c3,83,c2,b3 对于我插入的新值,我得到:Typ=1 Len=2 CharacterSet= AL32UTF8: c3,b3
-
对不起,我粘贴了错误的转换,我使用的原件是CONVERT(VALUE,'WE8ISO8859P1','UTF8'),之后我做了一些测试所以我换了地方......我将更新问题
-
您使用哪个客户端插入和查询数据?
标签: oracle character-encoding char