首页 > 其他分享 >警示:AL32UTF8字符集不是ZHS16GBK字符集的超集

警示:AL32UTF8字符集不是ZHS16GBK字符集的超集

时间:2023-12-24 12:44:24浏览次数:38  
标签:超集 ZHS16GBK Object 字符集 AL32UTF8 object

今天有客户向我咨询:数据库由ZHS16GBK字符集修改为AL32UTF8字符集,发现中文的数据中小部分出现乱码,客户认为AL32UTF8明明可以支持更多的文字,不应该出现这样的情况才对。 从现象看,基本可以确认故障是字符集转换导致的,Oracle也强烈不建议做这种字符集转换的操作,幸好该客户的操作只是在一个测试环境中操作的。不过,之前也一直有个误区,我们都知道AL32UTF8是可以支持多国语言的字符集,对于中文字节存储占用空间比ZHS16GBK多,然后第一反应就认为AL32UTF8应该是ZHS16GBK的超集。而如果是绝对的超集,就不应该出现任何乱码的情况,可实际用户反馈的现象的确是有小部分出现乱码的情况,所以有必要在测试环境再次验证一下。

1.首先我的库ZHS16GBK的字符集

[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]

2.尝试修改字符集为AL32UTF8 直接尝试修改,会发现Oracle明确给出错误提示ORA-12712:新的字符集必须是旧字符集的超集。这就说明我们要改的AL32UTF8字符集并不是ZHS16GBK的超集。

[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]

如果非要修改,可以加internal_use参数强制修改,而这样的操作,自然就很有可能会造成部分数据出现乱码:

[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]

此时如果我们通过PL/SQL Developer工具连接到数据库,还会有这样的警告信息:

而客户端是Windows,chcp结果是936,也就是ZHS16GBK,这也进一步说明了ZHS16GBK和AL32UTF8字符集的不同。

同时实验还验证,如果数据库字符集本身是AL32UTF8,想修改成为ZHS16GBK字符集,也是一样的情况,需要加internal_use参数才可以转换,也就是说这种转换一样可能出现乱码,不过这个情况反倒好理解,也符合我们之前的认知,就不再赘述了。

标签:超集,ZHS16GBK,Object,字符集,AL32UTF8,object
From: https://www.cnblogs.com/lkj371/p/17924247.html

相关文章

  • [字符编码] 理论篇:常见字符集与编码方式
    作者:丶布布文章预览:一.基本概念1、字符集2、编码字符集3、字符编码方式4、编码字符集与编码方式间对应关系二.字符集与编码1、ASCII字符集&编码2、GBXXXX字符集&编码3、UCS字符集&编码4、Unicode字符集&编码5、ANSI编码6、源字符集编码7、可执行字符集编码三、总结......
  • 关于GreatSQL字符集的总结
    关于GreatSQL字符集的总结前言最近的SQL优化工作中经常遇到因字符集或校验规则不一致导致索引使用不了的问题,修改表的字符集或校验规则相当于把表重构,表中数据量大时,处理起来费时费力,希望应用开发者在设计之初时注意到此问题,让后期接手运维的小伙伴少一些负担。GreatSQL的字符集......
  • 更改Oracle字符集
    1、selectuserenv('language')fromdual; --查询字符集 2、shutdownimmediate; 关闭数据库实例 3、STARTUPMOUNT; --挂载  4、(依次执行以下命令)ALTER SESSION SETsql_TRACE=TRUE;ALTERSYSTEMENABLERESTRICTEDSESSION;ALTERSYSTEMSETJOB_QUEUE......
  • 用icu探测字符集
    g++str-charset.cpp-licui18n #include<iostream>#include<stdio.h>#include<string.h>#include<unicode/ucnv.h>#include<unicode/utypes.h>//#include<unicode/urename.h>#include<unicode/ucsdet.h>boolwhat_chars......
  • Illegal mix of collations (utf8mb4_0900_ai_ci,IMPLICIT) MySql字符集及校对规则不
    查询时报错--用于解决报错>1267-Illegalmixofcollations(utf8mb4_0900_ai_ci,IMPLICIT)and(utf8mb4_general_ci,IMPLICIT)foroperation'='这个错误是由于在进行比较操作时涉及到不同的字符集和校对规则(collations)。涉及到了utf8mb4_0900_ai_ci和utf8mb4_general......
  • 设置 IntelliJ IDEA 的默认字符集的方法
    设置IntelliJIDEA的默认字符集的方法 1、在顶部菜单栏找到“帮助(Help)”项(通常是最后一项),点击它并在弹出的二级菜单中选择“编辑定制虚拟机选项(EditCustomVMOptions...)”项。2、在默认追加如下配置:-Dfile.encoding=UTF-8 3、保存并重启IntelliJIDEA即可。......
  • 【文档翻译】每个开发者都必须了解的关于Unicode和字符集的基本知识
    本文档译自joelonsoftware.com的文章"TheAbsoluteMinimumEverySoftwareDeveloperAbsolutely,PositivelyMustKnowAboutUnicodeandCharacterSets(NoExcuses!)",作者joel,原文参见此处概述-Overview你是否在某一个平凡的日子,思考过那个神秘的Content-Type标......
  • 程序字符集知识
    一、基础知识:为什么采用中文编程不行?https://mp.weixin.qq.com/s/v22aUQ-9ietJYdz0wMNUUQ字符编码那点事:快速理解ASCII、Unicode、GBK和UTF-8https://zhuanlan.zhihu.com/p/38333902主要(分清)认识两个概念:字符集、字符编码(规则):字符集(Charset):是一个系统支持的所有抽象字符......
  • 如何修改Azure SQL server数据库的字符集(UTF-8)排序规则
    ......
  • 字符集mysql
    MySQL的字符集从latin1经过utf8到utf8mb4,算是经历曲折的路线。特别是从使用一个字符集变更另一个字符集时,实践当中都非常无奈,不是没办法,而是麻烦。到了MySQL8.0多出了一个字符集utf8mb4_0900_*的字符集,有必要了解一下。1.字符集基础先了解下MySQL字符集都有哪些地方使用,进入数据......