| 参数 | 取值 | 行为说明 |
|---|---|---|
| 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';
select * from DBA_TABLES where table_name='test';
select * from test;
select * from "test";
select age from "test";
select "age" from "test";
用户一致为大写
create USER "dma" identified by "Dmdata456";
create user dma identified by "Dmdata456";
select * from dba_users;
模式大写,小写标识不同模式
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;
索引大写,小写标识不同索引
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;
角色大写,小写标识不同角色
CREATE ROLE r_test;
CREATE ROLE "r_test";
SELECT role FROM dba_roles;
表空间大写,小写标识不同表空间,但数据文件名会被转换为大写
create tablespace TEST datafile 'TEST.DBF' size 128 ;
create tablespace "test" datafile 'test1.DBF' size 128 ;
create tablespace TEST datafile 'TEST.DBF' size 128 ;
create tablespace "test" datafile 'test.DBF' size 128 ;
初始化实例
./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);
SELECT * from DBA_TABLES where TABLE_NAME='test';
drop TABLE test;
create table test(id int);
create table TEST(id int);
SELECT * from DBA_TABLES where TABLE_NAME='TEST';
-- -- 字段名无论大小写都指向同一字段,数据库记录字段名为用户输入形式
create TABLE test(ID int ,"id" char(4) );
create TABLE test(ID int ,"id2" char(4) );
SELECT * from test;
-- 用户名统一记录转换大写
create USER "dma" identified by "Dmdata456";
create USER DMA identified by "Dmdata456";
select * from dba_users;
-- 模式大写,小写指向同一模式
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;
索引大写,小写标识不同索引
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;
-- 同名大写
CREATE INDEX IDX_NAME ON test(name);
表空间大写,小写标识指向同一表空间。
create tablespace test datafile 'TEST.DBF' size 128 ;
create tablespace TEST datafile 'test1.DBF' size 128 ;
select
| charset 取值 | UNICODE_FLAG | 字符集 | 说明 |
|---|---|---|---|
| 0 | 0 | GB18030 | 默认值;非 Unicode;汉字占 2 字节 |
| 1 | 1 | UTF‑8 | Unicode;汉字占 3 字节 |
| 2 | 2 | EUC‑KR | 韩文字符集,中文会乱码,国内极少使用 |
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();
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();
GB18030
select length('中国'), lengthb('中国');
-- length=2(字符),lengthb=4(字节)
UTF‑8
select length('中国'), lengthb('中国');
-- length=2(字符),lengthb=6(字节)
| 数据类型 | 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('一二三四五六');
SELECT
name_vc, LENGTH(name_vc), LENGTHB(name_vc),
name_nvc, LENGTH(name_nvc), LENGTHB(name_nvc)
FROM t_text;
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('一二三四');
重新插入VARCHAR(10)
INSERT INTO t_text(name_vc) VALUES('一二三四');
SELECT
name_vc, LENGTH(name_vc), LENGTHB(name_vc),
name_nvc, LENGTH(name_nvc), LENGTHB(name_nvc)
FROM t_text;
文章
阅读量
获赞
