ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

DM实例大小写敏感的区别

2021-05-07 23:34:36  阅读:207  来源: 互联网

标签:DM varchar name 实例 大小写 test table 执行


在数据库的使用过程中,经常会遇到各种各样的问题,想要做到事半功倍,对数据库的了解以及在做数据库设计的时候就应该考虑很多问题,在初始化实例之前需要向用户说明哪些参数初始化实例之后不能改,相关参数的作用,如字符集GB18030是比UTF-8节省体积等。下面说明DM大小写敏感的区别

初始化实例

达梦数据库大小写敏感是由case_sensitive参数来控制大小写敏感的
设置大小写不敏感时,不能设置GB18030字符集
image

大小写敏感:
./dminit path=/dmdata case_sensitive=1 charset=1 db_name=case1 instance_name=sensitive
大小写不敏感;
./dminit path=/dmdata case_sensitive=0 charset=1 db_name=case0 instance_name=insensitive
查询大小写是否敏感
SELECT SF_GET_CASE_SENSITIVE_FLAG();
image
1表示敏感,0表示不敏感。
通过DM管理工具也能查看到,右键连接,选择管理服务器
image
image

大小写不敏感

create table test(name varchar);
执行成功, 执行耗时72毫秒. 执行号:51512
insert into test values('aaa');
执行成功, 执行耗时2毫秒. 执行号:51513
insert into test values('AAA');
执行成功, 执行耗时1毫秒. 执行号:51514
insert into TEST(NAme) values('bbb');
执行成功, 执行耗时1毫秒. 执行号:51515
create table Test(name varchar);
执行失败(语句1)
第1 行附近出现错误[-2124]:
对象[test]已存在
create table TEST(name varchar);
执行失败(语句1)
第1 行附近出现错误[-2124]:
对象[test]已存在
select dbms_metadata.get_ddl('TABLE','test','SYSDBA')from dual;
/* 查询结果
CREATE TABLE "SYSDBA"."test"
(
"name" VARCHAR(8188)) STORAGE(ON "MAIN", CLUSTERBTR) ;
*/
drop table test;
create table "Test"(name varchar);
select dbms_metadata.get_ddl('TABLE','test','SYSDBA')from dual;
/*查询结果
CREATE TABLE "SYSDBA"."Test"
(
"name" VARCHAR(8188)) STORAGE(ON "MAIN", CLUSTERBTR) ;
*/
create test1(name varchar(10),NAME varchar(10));
执行失败

总结:

  1. 无论对不对表名或列名加双引号,表名和列名大小写形式不会发生变化,创建时是大写就是大写,是小写就是小写。
  2. 不允许存在同名的数据库对象,即使大小写不同也算同名。
  3. 一个表中,不允许出现相同字段名,大小写不同也算同名。

大小写敏感库

create table test(name varchar);
执行成功, 执行耗时127毫秒. 执行号:51508
insert into test values('aaa');
执行成功, 执行耗时2毫秒. 执行号:51509
insert into test values('AAA');
执行成功, 执行耗时2毫秒. 执行号:51510
insert into TEST(NAme) values('bbb');
执行成功, 执行耗时1毫秒. 执行号:51511
create table Test(name varchar);
执行失败(语句1)
第1 行附近出现错误[-2124]:
对象[TEST]已存在
create table TEST(name varchar);
执行失败(语句1)
第1 行附近出现错误[-2124]:
对象[TEST]已存在
create table "Test"(name varchar);
执行成功, 执行耗时5毫秒. 执行号:51519
select dbms_metadata.get_ddl('TABLE','test','SYSDBA')from dual;
执行失败(语句1)
未找到对象或不允许查询系统定义的内部索引
select dbms_metadata.get_ddl('TABLE','TEST','SYSDBA')from dual;
/* 查询结果
CREATE TABLE "SYSDBA"."TEST"
(
"NAME" VARCHAR(8188)) STORAGE(ON "MAIN", CLUSTERBTR) ;
*/
create table test1("name" varchar(10),"NAME" varchar(10));
执行成功, 执行耗时24毫秒. 执行号:51521

总结:

  1. 不加双引号,创建表时会自动将表名和列名自动转换成大写形式,加双引号表名和列名则会保留原形式。
    create table test和create table "test"是不同的,前者会自动转换成TEST,后者保留原形式test。
  2. 大小写不同的两个表是不同对象。
  3. 一个表中,允许存在同名但大小写形式不同的字段。

标签:DM,varchar,name,实例,大小写,test,table,执行
来源: https://www.cnblogs.com/itschen/p/14743112.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有