Oracle修改字符集

背景:公司给更换了配置较高的笔记本,所以一切软件又要重新安装了,也是又一次翻着百度安装Oracle,技术不到家也好,保险也罢,我实在是怕错了一步,又要卸载了从头再来,卸载干净Oracle实在是太恶心。在其中的一步,由于我忘记原来备份的数据库是以什么字符集存储的,就手贱的把正在安装的字符集更换成了“UTF8”,而原来的字符集是默认的,so,就有了这篇文章。原谅小白昏头昏脑的这一波操作。


修改服务端数据库字符集

由于我的数据端本身就是在自己的电脑上安装着,所以就不存在什么远程操作了。倘若要修改虚拟机或是其他PC上的数据库字符集,那还是要SSH到远程位置进行操作。

  1. 查询目前数据库所使用的字符集(可直接在plsql中执行以下语句):

select * from V$NLS_PARAMETERS;

其中查询结果中 “NLS_CHARACTERSET” 的值即为目前所使用的,大部分都为“ZHS16GBK”或“AL32UTF8”的其中一种。我的结果如下图(我已经修改回来了):

查询结果.png

原来的值为“AL32UTF8”,我要改成图中的结果。

  1. 修改字符集(将“AL32UTF8”更改为“ZHS16GBK”)
    其实,平常我们执行sql等基本已经熟悉了plsql客户端的方式,但这个修改是要在cmd命令行中进行的。
  • win+R,输入“cmd”进入命令行;
  • 将数据库启动到RESTRICTED模式[1]下做字符集更改:
    • 进入sqlplus
      SQL\> sqlplus/nolog

    • 以管理员身份登录
      SQL\> conn / as sysdba

    • 然后就是关闭数据库,进入限制模式,修改字符集
      SQL\> shutdown immediate;

      数据库已经关闭。
      已经卸载数据库。
      ORACLE 例程已经关闭。

      SQL> startup mount;

      ORACLE 例程已经启动。
      Total System Global Area 6781128704 bytes
      Fixed Size 2188608 bytes
      Variable Size 3523218112 bytes
      Database Buffers 3238002688 bytes
      Redo Buffers 17719296 bytes
      数据库装载完毕。

      SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;

      系统已更改。

      SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;

      系统已更改。

      SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;

      系统已更改。

      SQL> alter database open;

      数据库已更改。

      SQL> ALTER DATABASE CHARACTER SET ZHS16GBK;

      ALTER DATABASE CHARACTER SET ZHS16GBK*
      第 1 行出现错误:
      ORA-12712: 新字符集必须为旧字符集的超集

      此处我们使用“INTERNAL_USE ZHS16GBK”字符集来跳过子集检查。
      SQL> ALTER DATABASE character set INTERNAL_USE ZHS16GBK;

      数据库已更改。

  • 现在我们就已经把字符集修改完毕了。重启一下数据库。
    SQL> shutdown immediate;
    SQL> startup;
  • 再次执行查询字符集语句,可看到修改结果。
  1. 修改环境变量。
    我使用的是Windows环境,所以直接添加系统变量。
    变量名称:NLS_LANG;
    变量值:SIMPLIFIED Chinese_CHINA.ZHS16GBK(你修改的值);

这样服务端的数据库字符集就修改完成了。

修改客户端数据库字符集

客户端的字符集就不涉及到数据库的命令了,主要是Oracle客户端与数据库内置不一致导致的,修改安装数据库时的注册表就可以。

  • win + R,输入“regedit”进入注册表设置;
  • 按照以下目录层级找到目标位置:

    HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/KEY_OraDb11g_home1/NLS_LANG

  • 将这个变量的值设置为你想要修改的值即可。

这样客户端的字符集也设置完毕了。

目前字符集是设置完毕,可是原来是GBK的数据导入到了UTF8字符集的数据库里,再改回来也还是乱码,只能重新导入dmp备份文件了。下一篇就是总结的Oracle导入dmp文件的内容。
PS:目前自认技术还差的很远很远,几乎算是小白一个,所以,记录这些小的知识点不光是为了以后自己翻起来方便,而且对自己也是一种成长,也希望能帮到跟我一样的小白。我热爱这个行业,享受创造的过程,所以才需要更努力去见识更大的天空。知识浅显,还请各位莫要取笑。


参考资料:Fred、的窃窃私语博客


  1. 在这种模式下,服务器端只有拥有dba角色的用户和具有restrict session权限的用户才能连接数据库;在远程无论拥有什么角色都无法连接。在数据库做运维(变更)的情况下且不想其他会话连接到数据库,那么可以使用此种方式,避免其他用户连接。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,165评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,503评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,295评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,589评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,439评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,342评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,749评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,397评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,700评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,740评论 2 313
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,523评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,364评论 3 314
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,755评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,024评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,297评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,721评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,918评论 2 336

推荐阅读更多精彩内容