注册
case_sensitive和charset参数
专栏/技术分享/ 文章详情 /

case_sensitive和charset参数

DM_738629 2026/09/30 234 0 0
摘要

case_sensitive

参数 取值 行为说明
case_sensitive 默认Y,1 标识符大小写敏感;不加双引号自动转大写,双引号内标识符大小写原样保留
case_sensitive N,0 标识符大小写不敏感;无论是否双引号,标识符统一转为大写存储

大小写敏感

初始化实例

./dminit path=/dmdata/data page_size=32 extent_size=32 instance_name=dmserver case_sensitive=1 SYSDBA_PWD=DMdata456 SYSAUDITOR_PWD=DMdata456 log_size=2048

表名和字段

表名和字段大写,小写是不同的标识

create table test (id int);
create table "test" ("age" int);
select * from DBA_TABLES where table_name='TEST';

image20260901212436186.png

select * from DBA_TABLES where table_name='test';

image20260901212510817.png

select * from test;

image20260901212611921.png

select * from "test";
select age from "test";
select "age" from "test";

image20260901213921887.png

image20260901213855391.png

用户名和模式

用户一致为大写

create USER "dma" identified by "Dmdata456";
create user dma identified by "Dmdata456";

select * from dba_users;

image20260901225324914.png

image20260901225353816.png

模式大写,小写标识不同模式
create schema resourse AUTHORIZATION dma;
 create schema "resourse" AUTHORIZATION dma;
 
 SELECT
      OBJ.ID,
      OBJ.NAME AS SCHEMA_NAME,
      USR.NAME AS OWNER_USER
   FROM SYS.SYSOBJECTS OBJ
   LEFT JOIN SYS.SYSOBJECTS USR ON OBJ.PID = USR.ID
   WHERE OBJ.TYPE$='SCH'
   ORDER BY SCHEMA_NAME;

image20260901215142918.png

索引和角色

索引大写,小写标识不同索引

CREATE TABLE test(id INT, name VARCHAR(20));

--1.不使用双引号创建索引,索引名自动转大写
CREATE INDEX idx_name ON test(name);

--2.双引号,强制创建小写索引 "idx_age"
CREATE INDEX "idx_age" ON test(id);

--查询数据字典,查看索引真实存储名称
SELECT * FROM user_indexes;

image20260901215814381.png

角色大写,小写标识不同角色

CREATE ROLE r_test;
CREATE ROLE "r_test";
SELECT role FROM dba_roles;

image20260901220252979.png

表空间

表空间大写,小写标识不同表空间,但数据文件名会被转换为大写

create tablespace TEST datafile 'TEST.DBF' size 128 ;
create tablespace "test" datafile 'test1.DBF' size 128 ;

image20260901220717743.png

create tablespace TEST datafile 'TEST.DBF' size 128 ;
create tablespace "test" datafile 'test.DBF' size 128 ;

image20260901221147259.png

大小写不敏感

初始化实例

./dminit path=/dmdata/data page_size=32 extent_size=32  db_name=DMOA instance_name=DMOAserver case_sensitive=0 port_num=5237 SYSDBA_PWD=DMdata456 SYSAUDITOR_PWD=DMdata456 log_size=2048

表名和字段

-- 表名无论大小写都指向同一张表,数据库记录表名字段为用户输入形式
create table TEST(id int);
create table "test" (id int);

image20260901222129845.png

SELECT * from DBA_TABLES where TABLE_NAME='test';

image20260901222315929.png

drop TABLE test;
create table test(id int);
create table TEST(id int);

image20260901222440397.png

SELECT * from DBA_TABLES where TABLE_NAME='TEST';

image20260901222507765.png

-- -- 字段名无论大小写都指向同一字段,数据库记录字段名为用户输入形式
create TABLE test(ID int ,"id" char(4) );

image20260901222843289.png

create TABLE test(ID int ,"id2" char(4) );
SELECT * from test;

image20260901222933901.png

用户名和模式

-- 用户名统一记录转换大写
create USER "dma" identified by "Dmdata456";
create USER DMA identified by "Dmdata456";
select * from dba_users;

image20260901223746508.png

-- 模式大写,小写指向同一模式
create schema "resourse" AUTHORIZATION dma;
 create schema RESOURSE AUTHORIZATION dmb;
 
  SELECT
      OBJ.ID,
      OBJ.NAME AS SCHEMA_NAME,
      USR.NAME AS OWNER_USER
   FROM SYS.SYSOBJECTS OBJ
   LEFT JOIN SYS.SYSOBJECTS USR ON OBJ.PID = USR.ID
   WHERE OBJ.TYPE$='SCH'
   ORDER BY SCHEMA_NAME;

image20260901224139120.png

image20260901224222174.png

索引和角色

索引大写,小写标识不同索引

CREATE TABLE test(id INT, name VARCHAR(20));

--1.小写索引
CREATE INDEX idx_name ON test(name);

--2.大写索引
CREATE INDEX IDX_NAME ON test(id);

--查询数据字典,查看索引真实存储名称
SELECT * FROM user_indexes;

image20260901224537188.png

-- 同名大写
CREATE INDEX IDX_NAME ON test(name);

image20260901224604009.png

表空间

表空间大写,小写标识指向同一表空间。

create tablespace test datafile 'TEST.DBF' size 128 ;
create tablespace TEST datafile 'test1.DBF' size 128 ;
select 

image20260901224841837.png

image20260901224941038.png

charset

charset 取值 UNICODE_FLAG 字符集 说明
0 0 GB18030 默认值;非 Unicode;汉字占 2 字节
1 1 UTF‑8 Unicode;汉字占 3 字节
2 2 EUC‑KR 韩文字符集,中文会乱码,国内极少使用

GB18030与UTF‑8

初始化实例

GB18030

./dminit path=/dmdata/data page_size=32 extent_size=32 instance_name=dmserver charset=0 SYSDBA_PWD=DMdata456 SYSAUDITOR_PWD=DMdata456 log_size=2048

-- 查询字符集
SELECT SF_GET_UNICODE_FLAG(), UNICODE();

image20260901230856029.png

UTF‑8

./dminit path=/dmdata/data page_size=32 extent_size=32  db_name=DMUTF instance_name=DMUTFserver charset=1 port_num=5238 SYSDBA_PWD=DMdata456 SYSAUDITOR_PWD=DMdata456 log_size=2048

-- 查询字符集
SELECT SF_GET_UNICODE_FLAG(), UNICODE();

image20260901232959072.png

LENGTH / LENGTHB 字节字符对比

GB18030

select length('中国'), lengthb('中国');
-- length=2(字符),lengthb=4(字节)

image20260901231127576.png

UTF‑8

select length('中国'), lengthb('中国');
-- length=2(字符),lengthb=6(字节)

image20260901233026075.png

字节,字符单位验证
数据类型 UNICODE_FLAG=0 (GB18030,默认) UNICODE_FLAG=1(UTF‑8)
CHAR(n) / VARCHAR(n) n 代表字节 n 代表字节
NCHAR(n) / NVARCHAR(n) n 代表字符 n 代表字符

GB18030

DROP TABLE IF EXISTS t_text;
CREATE TABLE t_text(
    name_vc VARCHAR(10),    -- GB18030:10字节,最多5个汉字
    name_nvc NVARCHAR(10)   -- NVARCHAR(10):10个字符,最多存10个汉字,不受编码影响
);

-- 插入6个汉字:'一二三四五六'
-- NVARCHAR(10):按字符计数,可以存入10个汉字,6个完全没问题
INSERT INTO t_text(name_nvc) VALUES('一二三四五六');

-- VARCHAR(10):每个汉字2字节,6个汉字需要12字节 >10字节 → 截断报错
INSERT INTO t_text(name_vc) VALUES('一二三四五六');


image20260901231826461.png

SELECT 
  name_vc, LENGTH(name_vc), LENGTHB(name_vc),
  name_nvc, LENGTH(name_nvc), LENGTHB(name_nvc)
FROM t_text;

image20260901231855500.png

UTF‑8

DROP TABLE IF EXISTS t_text;
CREATE TABLE t_text(
    name_vc VARCHAR(10),    -- GB18030:10字节,最多5个汉字
    name_nvc NVARCHAR(10)   -- NVARCHAR(10):10个字符,最多存10个汉字,不受编码影响
);

-- 插入6个汉字:'一二三四五六'
-- NVARCHAR(10):按字符计数,可以存入10个汉字,6个完全没问题
INSERT INTO t_text(name_nvc) VALUES('一二三四五六');

-- VARCHAR(10):每个汉字3字节,4个汉字需要12字节 >10字节 → 截断报错
INSERT INTO t_text(name_vc) VALUES('一二三四');

image20260901233906747.png

重新插入VARCHAR(10)
INSERT INTO t_text(name_vc) VALUES('一二三四');

image20260901233927242.png

SELECT 
  name_vc, LENGTH(name_vc), LENGTHB(name_vc),
  name_nvc, LENGTH(name_nvc), LENGTHB(name_nvc)
FROM t_text;

image20260901233954944.png

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服