Kingbase数据库大小写敏感转换
Author:人大金仓‐数据库工程师‐何敏
Date : 2020‐07‐22
大小写敏感是在数据库安装时进行设置的,是实例级参数,无法针对数据库单独进行设置。如果需要修改大小写敏感设置,首选重装数据库;如果对数据库比较熟悉,可以通过initdb工具对数据库实例重新初始化,下面我们会详细介绍:
在安装数据库时,默认是大小写敏感的,其特性和Oracle基本一致:
1) 没有使用界定标识符(双引号)引起来的表名、列名,会默认转为大写。
2) 使用界定标识符引起来的表名、列名,将以引起来的大小写进行存储,以及后续的查询匹配。
在安装时,如果选择了case_insensitive,则数据库会被初始化为大小写不敏感。大小写不敏感的表现:
1) 在创建表时,没有使用界定标识符(双引号)引起来的表名、列名,默认以当前输入的大小写进行存储,查询时也以全小写进行匹配。
2) 在查询时,没有使用界定标识符(双引号)引起来的表名、列名,默认都转为小写进行匹配。
3) 使用界定标识符引起来的表名、列名,将以引起来的大小写进行存储,以及后续的查询匹配。
1) 不管大小写敏感与否,使用双引号引起来的表名、列名,都是按照引起来的大小写进行匹配。只有不使用界定标识符时有很大的差异。
2) 大小写敏感,适合于迁移Oracle数据库。大小写不敏感,适合于迁移MySQL和SQL Server数据库。
在数据库中,执行SQL语句即可查看:
SHOW case_sensitive;
on:表示大小写敏感。 off:表示大小写不敏感。 |
重新安装数据库时,如果数据库中有数据,一定要做好数据库备份,可以参考下面第三章的备份操作。
在重新安装的时候,选择大小写敏感,如下图所示:
勾选case_insensitive:表示大小写不敏感。
不勾选case_insensitive:表示大小写敏感。
下面的方法以Linux操作为例,Windows上对应的工具在安装目录\Server\bin下面。
使用sys_dump将整个原始库dump出来,做备份,如:
‐bash‐4.1$ sys_dump ‐U SYSTEM ‐W kingbase ‐Fp test > test_20190819.dump
如果有多个数据库,需要对每个数据库进行单独备份。
‐bash‐4.1$ sys_ctl ‐D /dbdata/kingbase/v8/data stop
waiting for server to shut down.... done
server stopped
注意:由于需要重新初始化数据库,需要将原来的data目录清空,因此最好先把当前的data目录做一个备份。
‐bash‐4.1$ sudo cp ‐r /dbdata/kingbase/v8/data
/dbdata/kingbase/v8/data_back_20190819
‐bash‐4.1$ rm ‐rf /dbdata/kingbase/v8/data/*
‐bash‐4.1$ initdb ‐E UTF‐8 ‐U SYSTEM ‐W Kingbase2019! ‐‐case‐insensitive ‐D
/dbdata/kingbase/v8/data
注意:这里的用户名和密码根据需要进行调整,最好是和之前保持一致
‐bash‐4.1$ initdb ‐E UTF‐8 ‐U SYSTEM ‐W Kingbase2019! ‐D /dbdata/kingbase/v8/data
注意:这里的用户名和密码根据需要进行调整,最好是和之前保持一致
可以简单的将备份的data目录中的对应配置文件拷贝到新的data目录中:
sys_hba.conf
kingbase.conf
‐bash‐4.1$ sys_ctl ‐D /dbdata/kingbase/v8/data start
‐bash‐4.1$ cat ~/.bash_profile
export KINGBASE_DATA=/dbdata/kingbase/v8/data/
export PATH=$PATH:/opt/Kingbase/ES/V8/Server/bin
export KINGBASE_PORT=54321
ksql ‐p 54321 ‐U SYSTEM ‐W Kingbase2019! ‐d test -c "select now();"
‐bash‐4.1$ ksql ‐p 54321 ‐U SYSTEM ‐W Kingbase2019! ‐d test‐f test_20190819.dump
我需要使用大小写敏感的功能;按照上面的操作操作后,结果大小写还是不敏感的,哪操作不正确?有时间帮忙解答下。
[kingbase@localhost V8]$ kingbase -V
KINGBASE (KingbaseES) V008R006C003B0071
[kingbase@localhost V8]$ initdb -E UTF-8 -USYSTEM -W -D /home/kingbase/KingbaseES/V8/data
属于此数据库系统的文件宿主为用户 "kingbase".
此用户也必须为服务器进程的宿主.
数据库簇将使用本地化语言 "zh_CN.UTF-8"进行初始化.
initdb: could not find suitable text search configuration for locale "zh_CN.UTF-8"
缺省的文本搜索配置将会被设置到"simple"
The comparision of strings is case-sensitive.
禁止为数据页生成校验和.
输入新的超级用户口令:
再输入一遍:
创建目录 /home/kingbase/KingbaseES/V8/data ... 成功
正在创建子目录 ... 成功
选择动态共享内存实现 ......posix
选择默认最大联接数 (max_connections) ... 100
选择默认共享缓冲区大小 (shared_buffers) ... 128MB
selecting default time zone ... Asia/Shanghai
创建配置文件 ... 成功
Begin setup encrypt device
initializing the encrypt device ... 成功
正在运行自举脚本 ...成功
正在执行自举后初始化 ...成功
create security database ... 成功
load security database ... 成功
create initial audit rules ... 成功
同步数据到磁盘...成功
initdb: 警告: 为本地连接启用"trust"身份验证
你可以通过编辑 sys_hba.conf 更改或你下次
执行 initdb 时使用 -A或者--auth-local和--auth-host选项.
成功。您现在可以用下面的命令开启数据库服务器:
sys_ctl -D /home/kingbase/KingbaseES/V8/data -l 日志文件 start
[kingbase@localhost V8]$ mkdir -p /home/kingbase/KingbaseES/V8/data/sys_log
[kingbase@localhost V8]$ /etc/init.d/kingbase8d start
Starting KingbaseES V8:
waiting for server to start.... done
server started
KingbaseES V8 started successfully
[kingbase@localhost V8]$ ksql -p 54321 -U SYSTEM -W -d test -c "SHOW case_sensitive;"
口令:
case_sensitive
----------------
on
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。
添加我为好友,拉您入交流群!
请使用微信扫一扫!