zoukankan      html  css  js  c++  java
  • oracle 字符集 AL32UTF8、UTF8

     简介:ORACLE数据库字符集,即Oracle全球化支持(Globalization Support),或即国家语言支持(NLS)其作用是用本国语言和格式来存储、处理和检索数据。利用全球化支持,ORACLE为用户提供自己熟悉的数据库母语环境,诸如日期格式、数字格式和存储序列等。Oracle可以支持多种语言及字符集,其中oracle8i支持48种语言、76个国家地域、229种字符集,而oracle9i则支持57种语言、88个国家地域、235种字符集。由于oracle字符集种类多,且在存储、检索、迁移oracle数据时多个环节与字符集的设置密切相关,因此在实际的应用中,数据库开发和管理人员经常会遇到有关oracle字符集方面的问题。

           字符集,实质就是按照一定的字符编码方案,对一组特定的符号,分别赋予不同数值编码的集合。Oracle数据库最早支持的编码方案是US7ASCII。Oracle的字符集命名遵循以下命名规则:<Language><bitsize><encoding>   即:  <语言><比特位数><编码> 。比如: AL32UTF8表示:AL,代表all,指使用所有语言;32,,32位;UTF8编码。查看环境变量发现:NLS_LANG=American_America.AL32UTF8,American表示语言;America表示地区;AL32UTF8字符集类型。

             AL32UTF8和UTF8有什么区别呢?Oracle的UTF8字符集由来已久,至少在8的时候就已经存在了,而对应的是UNICODE 3.0。而AL32UTF8字符集是9i才出现的,其对应的是UNICODE 5.0。这两种字符集的区别在于,UNICODE 5.0与3.0相比,又增加了一些新的补充字符。但是在实际当中,使用到这些新增字符的可能性非常小,因此绝大部分情况下,选择UTF8也是足够的。AL32UTF8字符集是9i才出现的,那么对于9i以后的版本访问没有任何问题,但是对于8i及以前的版本,则不认识这个字符集。这就使得8i及更低版本的客户端在访问9i以上AL32UTF8的数据库时,会碰到各种各样的问题。因此,如果数据库版本都在9i及其以上,不需要考虑ORACLE8的数据库,建议使用AL32UTF8字符集,它采用的Unicode标准要比UTF8采用的Unicode标准更新,支持的字符也更多一些。如果要考虑ORACLE8数据库,建议使用UTF8字符集,它的兼容性好,在ORACLE8及8I数据库上使用AL32UTF8字符集容易出现问题。随着现在版本11g逐渐开始称为主流版本,8i客户端的情况已经越来越少见了,因此在11.2的DBCA中,UTF8已经不是推荐字符集列表中的一员了。我们在遇到不兼容的问题时就要修改字符集。AL32UTF8-->UTF8修改字符集的步骤:

    shutdown immediate;     //关闭数据库服务器
    startup mount;
    alter session set sql_trace=true;
    alter system enable restricted session;
    alter system set job_queue_processes=0;
    alter system set aq_tm_processes=0;
    alter database open;
    alter database character set internal_use utf8;
    alter session set sql_trace=false;
    shutdown immediate;
    startup;

    下面是别人的一个实例:

    #su - oracle

    $sqlplus "/ as sysdba"

    SQL*Plus: Release11.2.0.3.0 Production on Wed Apr 18 14:40:10 2012
    Copyright (c) 1982, 2011, Oracle.  All rights reserved.
    Connected to:
    Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
    With the Partitioning, Automatic Storage Management, OLAP, Data Mining
    and Real Application Testing options

    SQL>

    修改之前的字符集
    SQL> select * fromv$nls_parameters where parameter='NLS_CHARACTERSET';
     
    PARAMETER                      VALUE
    ----------------- ----------------------------
    NLS_CHARACTERSET               AL32UTF8
     
    SQL>

    开始修改
    SQL> shutdownimmediate;
    Database closed.
    Database dismounted.
    ORACLE instance shut down.
    SQL> startup mount;
    ORACLE instance started.

    Total System Global Area 1603411968 bytes
    FixedSize                 2226912 bytes
    VariableSize            402654496 bytes
    Database Buffers         1191182336bytes
    RedoBuffers               7348224 bytes
    Database mounted.
    SQL> alter session setsql_trace=true;     

    Session altered.

    SQL> alter systemenable restricted session;

    System altered.

    SQL> show parameterjob_queue_process

    NAME                                TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    job_queue_processes                 integer     1000
    SQL> alter system setjob_queue_processes=0;

    System altered.

    SQL> show parameteraq_tm_processes

    NAME                                TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    aq_tm_processes                     integer     0
    SQL> alter databaseopen;

    Database altered.

    SQL> alter databasecharacter set internal_use utf8;

    Database altered.

    SQL> alter session setsql_trace=false;

    Session altered.

    SQL> shutdownimmediate;
    Database closed.
    Database dismounted.
    ORACLE instance shut down.
    SQL> startup
    ORACLE instance started.

    Total System Global Area 1603411968 bytes
    FixedSize                 2226912 bytes
    VariableSize            402654496 bytes
    Database Buffers         1191182336bytes
    Redo Buffers               7348224 bytes
    Database mounted.
    Database opened.
    SQL>

    修改之后的字符集
    SQL> select * fromv$nls_parameters where parameter='NLS_CHARACTERSET';
    PARAMETER                      VALUE
    ----------------- ----------------------------
    NLS_CHARACTERSET               UTF8
     
    SQL>

     

    --------end-------

    有关oracle字符集的知识点可以参看下面两篇帖子:

    http://blog.csdn.net/robinson_0612/article/details/6030398

    http://blog.163.com/zhyang@yeah/blog/static/130143844200991535913471/?fromdm&fromSearch&isFromSearchEngine=yes

  • 相关阅读:
    day37 多路复用IO模型之select select,poll,epoll 异步IO 数据库基本概念 配置文件管理
    day36 协程介绍/yield实现协程/补充/gevent模块/网络IO模型介绍/阻塞IO模型/非阻塞IO模型
    day35 GIL介绍 cpython解释器的垃圾回收机制 GIL与自定义互斥锁 多进程vs多线程 线程queue 进程池与线程池
    day34 线程介绍/开启线程的两种方式/进程vs线程/线程对象其他相关属性或方法/互斥锁/死锁现象与递归锁/信号量
    day33 守护进程、互斥锁、进程间通信、生产者消费者模型part1、生产者消费者模型part2、生产者消费者模型part3
    day 32 进程理论/开启子进程的两种方式/僵尸进程与孤儿进程/进程间内存空间隔离/join操作/进程对象其他相关属性或方法
    day31 基于udp协议套接字通信 udp协议通信循环原理分析 udp协议没有粘包问题/基于socketserver模块实现并发的套接字(tcp) 基于socketserver模块实现并发的套接字(udp) 进程的简单介绍 操作系统的功能介绍 操作系统的发展史
    day30 模拟ssh远程执行命令/解决粘包执行问题/粘包终极解决方案/tcp的优化算法以及粘包问题分析
    Unity3D游戏开发之MatchTarget实现角色攀爬效果
    javase学习第九天(抽象类与接口)
  • 原文地址:https://www.cnblogs.com/wangfengju/p/6173224.html
Copyright © 2011-2022 走看看