mysql - 有没有办法在下次重新启动之前禁用特定 mysql 数据库的区分大小写选项?

标签 mysql innodb case-sensitive

MySQL(Ubuntu 16.04 上的版本 5.7.24,小写表名为 0) : 以下查询返回错误

Error Code: 1054. Unknown column 'K.fieldname' in 'where clause'

SELECT *
FROM mytab k 
WHERE K.fieldname IS NULL;

(InnoDB)表 mytab 的 Alies 名称为小写(k),字段名称为 由大写 (K) 字母引用。

是否有任何选项可以在不更改代码或 my.cnf 设置的情况下解决此问题(例如设置变量 sessionwise 或 tablewise ...)。

最佳答案

您收到的错误似乎与 lower_case_table_names 参数设置无关。 Documentation中明确提到了:

Note

Although database, table, and trigger names are not case sensitive on some platforms, you should not refer to one of these using different cases within the same statement. The following statement would not work because it refers to a table both as my_table and as MY_TABLE:

mysql> SELECT * FROM my_table WHERE MY_TABLE.col=1;

因此,除了修复查询并在整个查询中使用相同的别名大小写之外,您没有其他解决方案:

SELECT *
FROM mytab k 
WHERE k.fieldname IS NULL;  /* <-- use small k here */

关于mysql - 有没有办法在下次重新启动之前禁用特定 mysql 数据库的区分大小写选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57906647/

相关文章:

mysql - 无法让 SQL 查询使用语法错误的变量 b/c

mysql - 在mysql中查找前一个和后一个raw

php - 我可以安全地依赖 mysql 中的列名大小写吗?

case-sensitive - 如何使 spaCy 不区分大小写

php - 在 Yii2 中访问数据

php - 文件无法保存在服务器中,怎么办?

mysql - mysql 在将成功返回给客户端之前是否将请求的修改写入文件系统

mysql - 为什么在创建表后删除 django DATABASE_OPTIONS 的 "init_command set engine=INNODB"?

mysql - 5 年后,mySQL innoDB 表中有几行消失了

scala - 忽略scala中字符串的大小写