1、前言

达梦数据库安装完后,需要初始化实例,在初始化实例时,需要注意的问题是关于大小写敏感的设置,大小写敏感只能在初始化数据库的时候设置,默认为大小写敏感,一旦设置成功就无法修改,如果想要修改,只能重新初始化实例。

2、定义

大小写敏感,表示数据库对于字符串的比较,是否区分大小写。大小写敏感,即区分大小写,大小写不敏感,即不区分大小写。

SELECT CASE_SENSITIVE(); ------结果为 1 是大小写敏感,结果为 0 是不敏感

区分大小写针对三个部分:
1) 对象名(表名、存储过程、序列等其他对象)或者字段名(也就是列名)
2) 字段内容
3) 其他字符串内容(比如用户输入的字符串类型的条件值,如where COL =‘xxxxxx’ )

3、如何设置大小写敏感

3.1 图形化安装  

 达梦dbca工具  初始化实例这一步,“字符串比较大小写敏感”的 默认值为“勾选”(即为1 ),如下图所示

3.2 命令行方式安装

命令行dminit 工具初始化实例,通过下图中参数指定

docker 达梦大小写不敏感 达梦不区分大小写_大小写敏感

 通过 case_sensitive 进行设置,参数默认值为Y (即为1 ),也就是敏感(区分大小写)。

 如需设置为大小不敏感,则在dminit 时,设置【case_sensitive=n 】或者【case_sensitive=0 】即(参数名字大写或者小写都可以)。

4、 对象名

大小写敏感

docker 达梦大小写不敏感 达梦不区分大小写_docker 达梦大小写不敏感_02

 大小写敏感情况下,建表时表名ABc不加“”,系统会自动转换为大写,新建表名为ABC

SELECT * FROM TEST.ABc;     ------执行成功
SELECT * FROM TEST.ABC;     ------执行成功
SELECT * FROM TEST."ABc";   ------error:无效的表或视图名[ABc]
SELECT * FROM TEST."ABC";   ------执行成功

 

docker 达梦大小写不敏感 达梦不区分大小写_数据库_03

 大小写敏感情况下,建表时表名ABc加“”,新建表名为ABc

SELECT * FROM TEST.ABc;     ------error:无效的表或视图名[ABC]
SELECT * FROM TEST.ABC;     ------error:无效的表或视图名[ABC]
SELECT * FROM TEST."ABc";   ------执行成功
SELECT * FROM TEST."ABC";   ------error:无效的表或视图名[ABC]

在大小写敏感情况下,创建对象时,如果使用的是小写,会自动加上" "。则在查询时必须加上" "。

大小写不敏感

docker 达梦大小写不敏感 达梦不区分大小写_表名_04

SELECT * FROM TEST.Ab;   ---执行成功
SELECT * FROM TEST.AB;   ---执行成功
SELECT * FROM TEST."Ab"; ---执行成功
SELECT * FROM TEST."AB"; ---执行成功

docker 达梦大小写不敏感 达梦不区分大小写_大小写敏感_05

SELECT * FROM TEST.Ab;   ---执行成功
SELECT * FROM TEST.AB;   ---执行成功
SELECT * FROM TEST."Ab"; ---执行成功
SELECT * FROM TEST."AB"; ---执行成功

在大小写不敏感情况下,无论新建表时是否加上" ",表名都不会变,且对查询结果无任何影响。

5.字符串内容

新建表TEST,插入数据AB、Ab

CREATE TABLE  TEST(COL VARCHAR(100));      
INSERT INTO TEST VALUES('Abc');            
INSERT INTO TEST VALUES('ABC');

大小写敏感

SELECT COUNT(*) FROM TEST WHERE COL='Abc';    ------结果为1
SELECT COUNT(*) FROM TEST WHERE COL='ABC';    ------结果为1

大小写不敏感 

SELECT COUNT(*) FROM TEST WHERE COL='Abc';    ------结果为2
SELECT COUNT(*) FROM TEST WHERE COL='ABC';    ------结果为2

6、总结

大小写敏感时:

新建表,若表名或列名未添加双引号“”,则表名和列名会自动转换为大写形式;
若对表名或列名添加双引号“”,则会固定书写时的大、小写
同名的数据库对象,如果大小写不同,那么则为两个不同的对象。

字段同上,一个表中,即使是相同的字段名,只要大小写不同,允许存在同名且不同大小写形式的字段。

大小写不敏感时:

新建表时,无论对不对表名或列名添加双引号“”,表名和列名的大小写形式不会发生变化,大写形式就是大写形式,小写形式就是小写形式;

字段同上,不允许相同的字段名,即使大小写不同;查询时,’‘和"“界定符不区分大小写,界定符中的查询或过滤条件即使是大写或小写,都可以查询到预期的结果集。

参考:详解 DM 数据库字符串大小写敏感 | 达梦技术社区