关于Oracle数据库字符集的选择及乱码情况

背景: 在项目上,开发人员在安装Oracle数据库时采用的默认的编码集,导致后期正式运行时出现某些生僻字和中文符号. 出现乱码。出现的情况就是某些生僻字或中文符号点一经保存,数据库里面就直接变成了问号

(1)查看数据库字符集设置

select * from nls_database_parameters where parameter ='NLS_CHARACTERSET';


现数据库字符集设置的是 ZHS16GBK。经过尝试,把数据库字符集设置为utf8,生僻字是不再出现乱码的情况,但是中文点. 却依旧出现乱码。查询资料并验证后发现AL32UTF8 , 这种字符集可以正常显示 。这里需要注意,切记不可直接贸然去修改已经有数据的数据库的字符集,否则,新写进去的数据是没问题了。但是以前的数据就全部都乱码了。因此需要先将数据导出来,然后再进行数据的迁移(源数据库(ZHS16GBK) -----> 目标数据库(AL32UTF8))
如果不迁移数据库情况:
有2种解决方案:1、生僻字乱码要换字段类型,换成Nvarchar;
2、把生僻字存成unicode字符,然后读取的时候转换成字符串;
notes:Nvarchar的存储效率,存储空间都会比varchar大得多

(2)ORACLE数据库的字符集

AL32UTF8是什么?为什么不是UTF8? 环境变量里设置的SIMPLIFIED
CHINESE_CHINA.ZHS16GBK是什么?为什么不直接设GBK? 在数据库里的各个视图里查到的字符集究竟是客户端的还是数据库的?
I.字符集代码
ORACLE中的字符集代码,并不等于目前通用的字符集名称。先来看看官方提供的
ORACLE字符集与通用字符集对照表
其实根据这个表格中的"Description"可以了解到,目前这些通用的字符集名称都太长了,且毫无规则,不能作为代码使用;并且还存在一些特殊情况,比如"JA16EUCTILDE"和"JA16EUC"两种字符集,实际上都是"EUC 24-bit Japanese",只有波浪线不一样,就分成了两个字符集。
所以oracle必须自己再对这些字符集进行一次统一命名,因此有了"AL32UTF8"以及"ZHS16GBK"这样的字符集代码

II.NLS_LANG
在系统环境变量(或注册表)"NLS_LANG"中,经常会配置类似下面这样的值

SIMPLIFIED CHINESE_CHINA.ZHS16GBK
AMERICAN_AMERICA.AL32UTF8

其实这个环境变量由3个部分组成

<Language<territory<character

语言_地区.字符集
只有最后一截才是真正表示字符集

所以"SIMPLIFIED CHINESE_CHINA.ZHS16GBK"表示:“简体中文”_“中国地区”.“16位GBK简体中文”

同理,"AMERICAN_AMERICA.AL32UTF8"表示:“美式英语”_“美国地区”.“Unicode12.1通用字符集UTF-8编码方案”。

当然,在环境变量中,这3个并非全部必填,你甚至可以用 "_.AL32UTF8"表示使用数据库默认的语言和地区,但客户端使用你指定的字符集;用 "_AMERICA."只指定客户端地区,语言使用该地区的默认语言,字符集使用该地区默认语言对应的字符集。

关于Oracle数据库字符集的选择及乱码情况相关推荐

  1. 理解ORACLE数据库字符集

    一.引言     ORACLE数据库字符集,即Oracle全球化支持(Globalization Support),或即国家语言支持(NLS)其作用是用本国语言和格式来存储.处理和检索数据.利用全球化 ...

  2. Oracle数据库字符集问题解决方案大全

    在国内外大中型数据库管理系统中,把ORACLE作为数据库管理平台的用户比较多.ORACLE 不论是数据库管理能力还是安全性都是无可非议的,但是,它在汉字信息的显示方面着实给中国用户带来不少麻烦,笔者多 ...

  3. oracle 字符集修改方案,Oracle数据库字符集问题解决方案大全

    在国内外大中型数据库管理系统中,把ORACLE作为数据库管理平台的用户比 较多.ORACLE 不论是数据库管理能力还是安全性都是无可非议的,但是,它在汉 字信息的显示方面着实给中国用户带来不少麻烦,笔 ...

  4. ORACLE数据库字符集

    ORACLE数据库字符集 一.字符集基本知识 二.查询oracle server端的字符集 三.修改oracle的字符集 字符集基本知识 1.基本认知 ORACLE数据库字符集,即Oracle全球化支 ...

  5. Oracle数据库字符集为WE8ISO8859P1存储中文和Java读写展示

    文章目录 前言 再次出现的现象 分析 失败尝试1 失败尝试2 失败尝试3 解决 结论 前言 之前<Oracle数据库字符集为WE8ISO8859P1存储中文和客户端程序展示中文问题>记录了 ...

  6. oracle数据库字符集AL32UTF8修改为ZHS16GBK即从超集到子集

    转自:https://www.cnblogs.com/perilla/p/3873653.html 一.什么是Oracle字符集 Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的 ...

  7. oracle数据库字符集characterset迁移及变更之csscan及csalter.plb系列三

    背景 本文主要熟悉下如何用csscan以及csalter脚本变更数据库字符集,进一步理解如何调整数据库字符集的知识. 之前的相关文章链接: oracle10g_csscan_更变数据库字符集及国家字符 ...

  8. [Oracle数据库] oracle数据库字符集characterset迁移及变更之csscan及csalter.plb系列三

    背景 本文主要熟悉下如何用csscan以及csalter脚本变更数据库字符集,进一步理解如何调整数据库字符集的知识. 之前的相关文章链接: oracle10g_csscan_更变数据库字符集及国家字符 ...

  9. oracle数据库字符集characterset迁移及变更之csscan及csalter.plb系列四

    背景 数据库字符集涉及的概念与知识非常多,本文继续学习:相关文章链接见下: oracle数据库字符集characterset迁移及变更之csscan及csalter.plb系列三    http:// ...

最新文章

  1. php比较长的configure
  2. 如何导出项目到本地_【点滴故事】:如何做项目本地化?
  3. 傲娇Android二三事之操蛋的开发日记(第一回)
  4. 撰写第三周课程总结及实验报告(一)
  5. linux修改mysql配置文件_Linux下PHP开发环境搭建(Apache2.4+PHP7.1+MySQL5.7)
  6. .NET6之MiniAPI(三):Response
  7. 进程共享(读时共享写时复制)
  8. 前端学习(663):逻辑中断逻辑与
  9. html5 版街头霸王,街头霸王5全DLC整合版
  10. 4、Cocos2dx 3.0游戏开发找小三之Hello World 分析
  11. linux 下mysql忘记密码或者安装好linux后不知道mysql初始密码解决方案
  12. 北京-波士顿-西雅图时间对照表
  13. 重定向telnet方法
  14. Java开发环境系列:你真的会用eclipse吗?
  15. 《 剑指offer》 目录索引
  16. 《中国历史2000问》读后笔记
  17. Fully Convolutional Cross-Scale-Flows for Image-based Defect Detection
  18. uniapp之app自动更新
  19. [转] Photoshop教程8000例
  20. 深度优先搜索——走迷宫问题

热门文章

  1. 获取小程序模板库标题列表 报错: {errcode:-1,errmsg:system error hint: [zttteq44664}
  2. 给语音信号加混响的常用方法(方法四)
  3. 600w播放,80w涨粉,B站UP主恰饭B站粉丝竟刷屏感谢甲方!
  4. 2007年论坛AD十件大事
  5. linux查看当前操作系统内核和版本
  6. 环境光吸收(也叫环境光遮蔽,Ambient Occlusion)
  7. 我理解的SVPWM(一)
  8. Tushare学习与使用(二)
  9. python如何下载tushare_python tushare安装
  10. 4G路由器串口modbus RTU转TCP协议测试基本示例