问题1:请问在Oralce中AL16UTF16与AL32UTF8的区别?问题2:请问Oracle支持UTF-32吗?问题3:请问直接把UTF-32的数据插入AL16UTF16或者AL32UTF8的Oralce数据库表中会有问题吗?会不会丢失真实数据?谢谢!

解决方案 »

  1.   

    想搞清楚这几个问题,楼主需要分清楚三个概念:字符、字节和编码。比如2D 4E和D6 D0和e4 b8 ad和FF FE 2D 4E是字节,但是都对应同一个字符:‘中’。编码:把字符变成字节的过程。比如D6 D0把字符‘中’使用GB2312进行编码的字节结果。e4 b8 ad把字符‘中’使用Utf-8进行编码的字节结果。2D 4E把字符‘中’使用进行Utf-16编码的字节结果。FF FE 2D 4E把字符‘中’使用Utf-32进行编码的字节结果。对于问题二:SELECT *
      FROM v$nls_valid_values
     WHERE parameter = 'CHARACTERSET'
    可以看到oracle支持的所有字符集。我的oracle不支持Utf32。对于问题三:如果你理解了字符、字节、编码就不会问出这个问题了,问题中概念不清无法回答。