热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

对达梦数据库CASE_SENSITIVE参数的探讨

CASE_SENSITIVE官方含义:标识符大小写敏感,默认值为Y。当大小写敏感时,小写的标识符应用双引号括起,否则被转换为大写;当大小写不敏感时,系统不自动转换标识符的

CASE_SENSITIVE 官方含义:

标识符大小写敏感,默认值为 Y。当大小写敏感时,小写的标识符应用双引号括起,否则被转换为大写;当大小写不敏感时,系统不自动转换标识符的大小写,在标识符比较时也不区分大小写。


CASE_SENSITIVE大小敏感(Y),可选值:Y/N,1/0

注意:该参数属于初始化参数,在创建实例时候定下来的,在参数配置文件dm.ini里没有记录。

大小写敏感通常涉及到2种对象:



  • 对象名

  • 数据


测试环境规划

创建2个实例:PRODA(大小写不敏感),PRODB(大小写敏感)































序号实例名称访问端口数据存放路径大小写是否敏感备注
1PRODA5237/dmA/dataCASE_SENSITIVE=N
2PRODB5238/dmB/dataBCASE_SENSITIVE=Y

1. 创建数据库存放路径

[root@gs08 ~]# mkdir -p /dmA
[root@gs08 ~]# chown -R dmdba:dinstall /dmA
[root@gs08 ~]# ll -ld /dmA
drwxr-xr-x 2 dmdba dinstall 4096 Aug 29 09:48 /dmA
[root@gs08 ~]# mkdir -p /dmB
[root@gs08 ~]# chown -R dmdba:dinstall /dmB
[root@gs08 ~]# ll -ld /dmB
drwxr-xr-x 2 dmdba dinstall 4096 Aug 29 09:49 /dmB

2. 创建实例PRODA

[root@gs08 ~]# su - dmdba
Last login: Mon Aug 29 09:44:03 CST 2022 on pts/1
[dmdba@gs08 ~]$ cd dmdbms/bin
[dmdba@gs08 bin]$ ./dminit PATH=/dmA/data DB_NAME=PRODA instance_name=PRODA SYSDBA_PWD=Dameng123 PORT_NUM=5237 CASE_SENSITIVE=N
initdb V8
db version: 0x7000c
file dm.key not found, use default license!
License will expire on 2023-05-25
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
log file path: /dmA/data/PRODA/PRODA01.log
log file path: /dmA/data/PRODA/PRODA02.log
write to dir [/dmA/data/PRODA].
create dm database success. 2022-08-29 09:50:37

3. 创建实例PRODB

[dmdba@gs08 bin]$ ./dminit PATH=/dmB/dataB DB_NAME=PRODB instance_name=PRODB SYSDBA_PWD=Dameng123 PORT_NUM=5238 CASE_SENSITIVE=Y
initdb V8
db version: 0x7000c
file dm.key not found, use default license!
License will expire on 2023-05-25
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
log file path: /dmB/dataB/PRODB/PRODB01.log
log file path: /dmB/dataB/PRODB/PRODB02.log
write to dir [/dmB/dataB/PRODB].
create dm database success. 2022-08-29 09:50:47

4. 注册服务并启动实例

PRODA

[root@gs08 root]# cd /home/dmdba/dmdbms/script/root
[root@gs08 root]# ./dm_service_installer.sh -t dmserver -p PRODA -dm_ini /dmA/data/PRODA/dm.ini
Created symlink from /etc/systemd/system/multi-user.target.wants/DmServicePRODA.service to /usr/lib/systemd/system/DmServicePRODA.service.
创建服务(DmServicePRODA)完成
[root@gs08 root]# su - dmdba
Last login: Mon Aug 29 09:50:22 CST 2022 on pts/1
[dmdba@gs08 ~]$ cd dmdbms/bin
[dmdba@gs08 bin]$ ll |grep Dm
-rwxr-xr-x 1 dmdba dinstall 13833 Aug 18 12:22 DmAPService
-rwxr-xr-x 1 dmdba dinstall 14497 Aug 18 12:22 DmAuditMonitorService
-rwxr-xr-x 1 dmdba dinstall 13661 Aug 18 12:22 DmInstanceMonitorService
-rwxr-xr-x 1 dmdba dinstall 14134 Aug 18 12:22 DmJobMonitorService
-rwxr-xr-x 1 dmdba dinstall 16461 Aug 18 13:31 DmServiceDMTEST
-rwxr-xr-x 1 dmdba dinstall 16459 Aug 29 13:17 DmServicePRODA
[dmdba@gs08 bin]$ ./DmServicePRODA status
DmServicePRODA is stopped
[dmdba@gs08 bin]$ ./DmServicePRODA start
Starting DmServicePRODA: [ OK ]
[dmdba@gs08 bin]$ ./DmServicePRODA status
DmServicePRODA (pid 6328) is running.

PRODB

[root@gs08 ~]# cd /home/dmdba/dmdbms/script/root
[root@gs08 root]# ./dm_service_installer.sh -t dmserver -p PRODB -dm_ini /dmB/dataB/PRODB/dm.ini
Created symlink from /etc/systemd/system/multi-user.target.wants/DmServicePRODB.service to /usr/lib/systemd/system/DmServicePRODB.service.
创建服务(DmServicePRODB)完成
[root@gs08 root]# su - dmdba
Last login: Mon Aug 29 13:17:27 CST 2022 on pts/0
[dmdba@gs08 ~]$ cd dmdbms/bin
[dmdba@gs08 bin]$ ll |grep Dm
-rwxr-xr-x 1 dmdba dinstall 13833 Aug 18 12:22 DmAPService
-rwxr-xr-x 1 dmdba dinstall 14497 Aug 18 12:22 DmAuditMonitorService
-rwxr-xr-x 1 dmdba dinstall 13661 Aug 18 12:22 DmInstanceMonitorService
-rwxr-xr-x 1 dmdba dinstall 14134 Aug 18 12:22 DmJobMonitorService
-rwxr-xr-x 1 dmdba dinstall 16461 Aug 18 13:31 DmServiceDMTEST
-rwxr-xr-x 1 dmdba dinstall 16459 Aug 29 13:17 DmServicePRODA
-rwxr-xr-x 1 dmdba dinstall 16460 Aug 29 13:22 DmServicePRODB
[dmdba@gs08 bin]$ ./DmServicePRODB status
DmServicePRODB is stopped
[dmdba@gs08 bin]$ ./DmServicePRODB start
Starting DmServicePRODB: [ OK ]
[dmdba@gs08 bin]$ ./DmServicePRODB status
DmServicePRODB (pid 8942) is running.

测试大小写不敏感的PRODA实例


  • 验证表名称

[dmdba@gs08 bin]$ ./disql sysdba/Dameng123:5237
服务器[LOCALHOST:5237]:处于普通打开状态
登录使用时间 : 1.501(ms)
disql V8
SQL> select name,instance_name,status$ from v$instance;
行号 name instance_name status$
---------- ----- ------------- -------
1 PRODA PRODA OPEN
已用时间: 2.074(毫秒). 执行号:55400.
SQL> select value,sys_value from v$parameter where name='GLOBAL_STR_CASE_SENSITIVE';
行号 VALUE sys_value
---------- ----- ---------
1 0 0
SQL> SELECT CASE_SENSITIVE();
行号 CASE_SENSITIVE()
---------- ----------------
1 0
SQL> CREATE TABLE a(C1 INT);
操作已执行
已用时间: 13.279(毫秒). 执行号:55412.
SQL> SELECT * FROM a;
未选定行
已用时间: 0.621(毫秒). 执行号:55413.
SQL> SELECT * FROM A;
未选定行
已用时间: 0.447(毫秒). 执行号:55414.
SQL> SELECT * FROM "a";
未选定行
已用时间: 0.477(毫秒). 执行号:55415.
SQL> SELECT * FROM "A";
未选定行
已用时间: 0.443(毫秒). 执行号:55416.
SQL>


  • 验证表数据

SQL> CREATE TABLE tt(C1 VARCHAR(100));
操作已执行
已用时间: 11.609(毫秒). 执行号:55417.
SQL> INSERT INTO tt VALUES('a');
影响行数 1
已用时间: 0.549(毫秒). 执行号:55418.
SQL> INSERT INTO tt VALUES('A');
影响行数 1
已用时间: 0.380(毫秒). 执行号:55419.
SQL> COMMIT;
操作已执行
已用时间: 1.514(毫秒). 执行号:55420.
SQL> SELECT COUNT(*) FROM tt WHERE C1='a';
行号 COUNT(*)
---------- --------------------
1 2
已用时间: 0.675(毫秒). 执行号:55421.
SQL> SELECT COUNT(*) FROM tt WHERE C1='A';
行号 COUNT(*)
---------- --------------------
1 2
已用时间: 0.637(毫秒). 执行号:55422.
SQL>

测试大小写敏感的PRODB实例


  • 验证表名称

[dmdba@gs08 bin]$ ./disql sysdba/Dameng123:5238
服务器[LOCALHOST:5238]:处于普通打开状态
登录使用时间 : 1.322(ms)
disql V8
SQL> select name,instance_name,status$ from v$instance;
行号 NAME INSTANCE_NAME STATUS$
---------- ----- ------------- -------
1 PRODB PRODB OPEN
已用时间: 1.067(毫秒). 执行号:55400.
SQL> select value,sys_value from v$parameter where name='GLOBAL_STR_CASE_SENSITIVE';
行号 VALUE SYS_VALUE
---------- ----- ---------
1 1 1
SQL> SELECT CASE_SENSITIVE();
行号 CASE_SENSITIVE()
---------- ----------------
1 1
已用时间: 0.518(毫秒). 执行号:55408.
SQL> CREATE TABLE a(C1 INT);
操作已执行
已用时间: 9.894(毫秒). 执行号:55409.
SQL> SELECT * FROM a;
未选定行
已用时间: 0.600(毫秒). 执行号:55410.
SQL> SELECT * FROM A;
未选定行
已用时间: 0.470(毫秒). 执行号:55411.
SQL> SELECT * FROM "a";
SELECT * FROM "a";
第1 行附近出现错误[-2106]:无效的表或视图名[a].
已用时间: 0.249(毫秒). 执行号:0.
SQL> SELECT * FROM "A";
未选定行
已用时间: 0.435(毫秒). 执行号:55412.


  • 验证表数据

SQL> CREATE TABLE tt(C1 VARCHAR(100));
操作已执行
已用时间: 8.216(毫秒). 执行号:55413.
SQL> INSERT INTO tt VALUES('a');
影响行数 1
已用时间: 0.514(毫秒). 执行号:55414.
SQL> INSERT INTO tt VALUES('A');
影响行数 1
已用时间: 0.374(毫秒). 执行号:55415.
SQL> COMMIT;
操作已执行
已用时间: 1.326(毫秒). 执行号:55416.
SQL> SELECT COUNT(*) FROM tt WHERE C1='a';
行号 COUNT(*)
---------- --------------------
1 1
已用时间: 0.869(毫秒). 执行号:55417.
SQL> SELECT COUNT(*) FROM tt WHERE C1='A';
行号 COUNT(*)
---------- --------------------
1 1
已用时间: 0.643(毫秒). 执行号:55418.
SQL>

小结

综上所述得出如下结论:



  1. DM数据库在默认情况下是大小写敏感的;

  2. 大小写不敏感的情况下,对表名称加不加双引号都可以,对查询没有影响;

  3. 大小写敏感的情况下,创建表名称不建议加上双引号,因为实际存储在字典中已全部转大写了。但是如果表名称里存在小写则必须加上双引号;

  4. 在大小写敏感情况下,是严格区分大小写的,在插入存在字母大小写的数据后,查询结果不受影响;在大小写不敏感情况下,是不区分大小写的,在插入存在字母大小写的数据后查询结果会受到影响。

  5. 因此建议使用达梦数据库时候一定要选大小写敏感。

参考链接:https://eco.dameng.com/document/dm/zh-cn/start/

image.png



推荐阅读
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
  • centos安装Mysql的方法及步骤详解
    本文介绍了centos安装Mysql的两种方式:rpm方式和绿色方式安装,详细介绍了安装所需的软件包以及安装过程中的注意事项,包括检查是否安装成功的方法。通过本文,读者可以了解到在centos系统上如何正确安装Mysql。 ... [详细]
  • Ihaveaworkfolderdirectory.我有一个工作文件夹目录。holderDir.glob(*)>holder[ProjectOne, ... [详细]
  • 本文介绍了使用readlink命令获取文件的完整路径的简单方法,并提供了一个示例命令来打印文件的完整路径。共有28种解决方案可供选择。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • REVERT权限切换的操作步骤和注意事项
    本文介绍了在SQL Server中进行REVERT权限切换的操作步骤和注意事项。首先登录到SQL Server,其中包括一个具有很小权限的普通用户和一个系统管理员角色中的成员。然后通过添加Windows登录到SQL Server,并将其添加到AdventureWorks数据库中的用户列表中。最后通过REVERT命令切换权限。在操作过程中需要注意的是,确保登录名和数据库名的正确性,并遵循安全措施,以防止权限泄露和数据损坏。 ... [详细]
author-avatar
瑞风大姑娘_214
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有