深入Oracle字符集的查看与修改详解

深入Oracle字符集的查看与修改详解

什么是字符集?

字符集(Character Set)是计算机内部处理文字和符号的方法。计算机只识别二进制,所以在计算机内部,都是以二进制形式来进行文字和符号的处理。而字符集就是将二进制编码与对应的文字符号进行配对,用于计算机的文字和符号的识别、存储和显示。

Oracle 中的字符集被分为两类:单字节字符集(SBCS)和多字节字符集(MBCS)。单字节字符集只使用一个字节来表示一个字符,而多字节字符集则使用两个或多个字节来表示一个字符。

查看Oracle字符集

数据库级别

可以通过以下 SQL 语句查看 Oracle 数据库的默认字符集:

SELECT * FROM v$parameter WHERE name LIKE '%char%';

结果显示:

NAME                         VALUE
--------------------------  ----------------------------------------
asm_charset                 UTF8
nls_characterset            AL32UTF8
nls_nchar_characterset      AL16UTF16

其中,nls_characterset 代表数据库默认字符集,这里显示的是 AL32UTF8,代表 Oracle 支持 Unicode 编码的字符集。

列级别

可以通过以下 SQL 语句查看一个表的列的字符集信息:

SELECT owner, table_name, column_name, data_type, data_length, data_precision, data_scale, char_length, char_used, nullable, column_id
FROM all_tab_columns
WHERE owner = 'YOUR_SCHEMA_NAME'
AND table_name = 'YOUR_TABLE_NAME';

其中,char_used 字段的值为 C 代表使用单字节字符集,为 B 代表使用多字节字符集。

修改Oracle字符集

修改数据库字符集

在创建新数据库时,可以使用 CREATE DATABASE 命令指定数据库字符集:

CREATE DATABASE mydb
CHARACTER SET AL32UTF8;

也可以使用 ALTER DATABASE 命令修改已有数据库的字符集:

ALTER DATABASE mydb
CHARACTER SET AL32UTF8;

注意:修改字符集会影响数据库中已有的数据,应慎重操作。

修改表的字符集

可以使用 ALTER TABLE 命令修改表的字符集:

ALTER TABLE mytable
MODIFY (mycolumn VARCHAR2(100) CHARACTER SET AL32UTF8);

其中,mycolumn 代表要修改的列名。

示例说明

示例一:查看数据库字符集和表的字符集

假设我们有一个 Oracle 数据库,要查看其默认字符集和一个表的列的字符集信息。

  1. 使用 SQL Developer 执行以下 SQL 语句:
SELECT * FROM v$parameter WHERE name LIKE '%char%';
  1. 结果显示如下:
NAME                         VALUE
--------------------------  ----------------------------------------
asm_charset                 UTF8
nls_characterset            ZHS16GBK
nls_nchar_characterset      AL16UTF16

说明该数据库默认字符集为 ZHS16GBK。接下来我们要查看一个表 studentsname 列的字符集信息。

  1. 使用 SQL Developer 执行以下 SQL 语句:
SELECT owner, table_name, column_name, data_type, data_length, data_precision, data_scale, char_length, char_used, nullable, column_id
FROM all_tab_columns
WHERE owner = 'YOUR_SCHEMA_NAME'
AND table_name = 'students';
  1. 结果显示如下:
OWNER    TABLE_NAME    COLUMN_NAME    DATA_TYPE    DATA_LENGTH    DATA_PRECISION    DATA_SCALE    CHAR_LENGTH    CHAR_USED    NULLABLE    COLUMN_ID
-------  ------------  -------------  -----------  ------------  ----------------  -----------  ------------  -----------  ----------  ----------
HR       STUDENTS      NAME           VARCHAR2     10            -                 -            20            C            Y           1

说明 students 表的 name 列使用单字节字符集。

示例二:修改数据库字符集和表的字符集

假设我们需要将数据库字符集修改为 UTF8,同时将表 studentsname 列的字符集修改为 UTF8。

  1. 使用 SQL Developer 执行以下 SQL 语句:
ALTER DATABASE mydb CHARACTER SET UTF8;
  1. 执行成功后,使用 SQL Developer 执行以下 SQL 语句:
ALTER TABLE students MODIFY (name VARCHAR2(10) CHARACTER SET UTF8);
  1. 执行成功后,使用第一条查看数据库字符集的 SQL 语句,显示如下:
NAME                         VALUE
--------------------------  ----------------------------------------
asm_charset                 UTF8
nls_characterset            UTF8
nls_nchar_characterset      AL16UTF16

说明数据库字符集已经修改为 UTF8。使用第二条查看表的字符集信息的 SQL 语句,显示如下:

OWNER    TABLE_NAME    COLUMN_NAME    DATA_TYPE    DATA_LENGTH    DATA_PRECISION    DATA_SCALE    CHAR_LENGTH    CHAR_USED    NULLABLE    COLUMN_ID
-------  ------------  -------------  -----------  ------------  ----------------  -----------  ------------  -----------  ----------  ----------
HR       STUDENTS      NAME           VARCHAR2     10            -                 -            10            C            Y           1

说明 students 表的 name 列的字符集已经由单字节字符集修改为 UTF8。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深入Oracle字符集的查看与修改详解 - Python技术站

(0)
上一篇 2023年5月21日
下一篇 2023年5月21日

相关文章

  • django1.11如何实时访问mysql数据库

    前几天,一直在研究django框架,发现它自身封装了很多有用的API,很有意思。比如,数据库操作基本的创表,查询,插值,更新,删除都有,很方便,再加上json库可以直接将数据json化,通过服务器传给前端并显示,连数据库也很快,响应迅速。 django 操作mysql数据库   取数据: 1 from blog.models import SfhdPredi…

    MySQL 2023年4月12日
    00
  • Golang Redigo连接Redis 简单使用

    func newPool(host string, db int) *redis.Pool { return &redis.Pool { MaxIdle: 50, MaxActive: 100, Dial: func() (redis.Conn, error) { options := redis.DialDatabase(db) c, err :=…

    Redis 2023年4月13日
    00
  • 拒绝“爆雷”!GaussDB(for MySQL)新上线了这个功能

    摘要:智能把控大数据量查询,防患系统奔溃于未然。 本文分享自华为云社区《拒绝“爆雷”!GaussDB(for MySQL)新上线了这个功能》,作者:GaussDB 数据库。 什么是最大读取行 一直以来,大数据量查询是数据库DBA们调优的重点,DBA们通常十八般武艺轮番上阵以期提升大数据查询的性能:例如分库分表、给表增加索引、设定合理的WHERE查询条件、限定…

    2023年4月8日
    00
  • SQL 组合使用外连接查询与聚合函数

    下面我给您讲解SQL组合使用外连接查询与聚合函数的完整攻略。 首先我们来说一下外连接查询和聚合函数的概念: 外连接查询:外连接查询是查询两个表之间关联关系的一种方式,它可以查询到主表(左表)以及与其相关联的从表(右表)中所有的记录,如果两个表中某些记录没有关联,那么该记录也会被查询出来,只是对应的从表部分信息为NULL。 聚合函数:聚合函数是指那些执行某种特…

    database 2023年3月27日
    00
  • linux系统启动自动激活网卡的解决方法

    下面是详细讲解“linux系统启动自动激活网卡的解决方法”的完整攻略: 1. 查看网卡信息 在linux系统中,使用ip addr命令可以查看当前系统的网卡信息,例如: $ ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group defau…

    database 2023年5月22日
    00
  • MySQL进阶查询、聚合查询和联合查询

    MySQL进阶查询、聚合查询和联合查询是MySQL数据库中非常重要的一部分,其能够对大数据进行高效的查询、分析和处理。以下是MySQL进阶查询、聚合查询和联合查询的完整攻略: MySQL进阶查询 MySQL进阶查询包括多表查询、子查询、联合查询等。在进行多表查询时,需要使用到MySQL的JOIN关键字,下面是一个示例: 示例1:多表查询 我们有两个表stud…

    database 2023年5月22日
    00
  • MySQL实现批量插入以优化性能的教程

    MySQL实现批量插入以优化性能的教程 当需要向MySQL数据库中插入很多数据时,使用单次插入的方式效率较低、速度慢。此时我们可以使用批量插入的方式,来提高插入数据的效率和速度。本文将详细介绍在MySQL中如何实现批量插入。 步骤: 构建数据数组 首先,我们需要构建一个包含多个数据行的二维数组。每个数据行应该是一个包含列名和对应值的关联数组。例如,如下的PH…

    database 2023年5月19日
    00
  • MySQL如何分析查询语句?

    MySQL是一种开源的、用于管理关系型数据库的软件,它支持许多不同的数据类型和适用于各种应用程序的查询语句。因此,在对MySQL上运行的查询进行优化和调整时,它可以提供一些有用的工具以确保查询能够更快速和有效地执行。 MySQL可以分析查询语句,以便在查询之前确定最佳的查询计划。查询计划是指MySQL如何检索数据并将它们返回给用户的过程。MySQL通过分析查…

    MySQL 2023年3月10日
    00
合作推广
合作推广
分享本页
返回顶部