MySQL shell 中不区分大小写的完成

Posted

技术标签:

【中文标题】MySQL shell 中不区分大小写的完成【英文标题】:Case-insensitive completion in MySQL shell 【发布时间】:2012-08-07 08:34:14 【问题描述】:

mysql 可以通过制表符完成 shell 命令和 SQL 声明。

但对于 SQL,它只完成大写输入。例如,'SEL' 将适用于 'SELECT',但 'sel' 不会。

对于 MySQL 是否有类似 .inputrc 的东西,我可以将其配置为不区分大小写的完成?

【问题讨论】:

【参考方案1】:

我来到 *** 寻找这个问题的答案,但既然没有,我想我自己研究一下答案。

MySQL 命令行客户端与 GNU Readline 库链接以提供选项卡补全,并且由于 MySQL 客户端解析 .inputrc(从使用 strace 检查 MySQL 客户端进行的系统调用可以看出) ,我以为会注意set completion-ignore-case On等选项。不幸的是,事实并非如此。

使用来源,卢克

虽然我不是 C++ 开发人员,但我检查了 source code for the command line client。

可以看到build_completion_hash()函数添加了诸如 SQL 关键字、表名和字段名到哈希(快速高效的形式 数据结构),用于提供补全。但是,part which adds SQL commands to the hash 只是添加了以下list of SQL commands。

这些 SQL 命令中的大多数以大写字母列出,但也有少数例外,例如 create databasecreate tableshow databasesshow fields from 以小写字母列出。由于这个生成的列表中的 SQL 关键字都是大写的,所以当 SQL 关键字是小写时,补全不起作用。

这个列表曾经包含一个简短的 SQL 命令列表(小写),例如,selectdropinsert。但是,在January 2008 中,这个简短列表被生成的 MySQL 支持的 SQL 命令列表所取代。

注意:我链接到 MySQL 的 MariaDB 分支的源代码,因为它更易于网络访问。 MariaDB 是来自 MySQL 代码库的二进制兼容分支,现在由 Oracle 拥有(该项目由 MySQL AB 背后的同一人运行)。从检查版本控制历史来看,我提到的客户端代码部分在过去几年中没有太大变化。

TLDR:答案似乎是否定的。

【讨论】:

以上是关于MySQL shell 中不区分大小写的完成的主要内容,如果未能解决你的问题,请参考以下文章

php中不区分大小写的突出显示

SQL语句中模糊查询中不区分大小写怎么写?如:select × from table where number like‘%PK%’

VBA代码在MS Access中不区分大小写的过滤器

Oracle中不区分大小写的主键

grails中不区分大小写的搜索

在 QAbstractItemModel 中不区分大小写排序