上周末写了一篇MySQL where查询字段值不区分大小写的文章(MySQL的where查询不区分字段大小写!!!),有个兄弟留言说经常遇到库名、表名、字段名的大小写问题。我想既然研究了大小写的问题,那就干脆研究彻底一点。

那么这一篇就再和大家一起详细聊聊“MySQL的大小写问题——库名、表名、字段名”。

说道库名、表名的大小写问题,就不得不聊 MySQL 的文件存储了。

MySQL 文件存储

首先看一下杨公子的MySQL实例中有哪些库、哪些表。

那么这些表的数据都存放在哪里呢?每个MySQL的数据存储位置都可能不同,如果你不知道你的MySQL数据文件的存储和路径,只需要执行这条命令:

show global variables like "%datadir%";

复制代码

可以看到我的MySQL 的存储路径就是/var/lib/mysql了。

再去MySQL数据存储路径下看看,数据到底是怎么存放的。

和上面的库表相对应,可以很清楚的看到,这些标红的文件夹,存放的就是每一个库的数据。数据库文件夹example下面这些.ibd后缀名的文件就是数据库 example 下每张表的数据文件。

到这里大家应该能总结出一个规律了,那就是:

MySQL的每个数据库都对应存放在所在操作系统的文件系统中一个与数据库同名的文件夹中。

MySQL的每张表都对应存放在一个或多个与表同名的文件中(该文件所在文件夹就是与表所属库同名的文件夹)。

注:MySQL 的数据存储原理还有很多内容,以后有机会杨公子再细细和大家一起来探讨。这篇文章就不和大家展开了。

到底大小写敏感不敏感

现在我们知道了,MySQL中库表的数据都是存储在操作系统的文件系统中的,而且对应的文件夹或文件命名和MySQL的库表名称相同,所以操作系统的大小写是否敏感决定了数据库大小写是否敏感。

那么我们来看看常用的三种操作系统对大小写是不是敏感呢?

Windows是对大小写不敏感的;

Linux是对大小写敏感的

Mac系统默认是大小写不敏感的(不过可以设置为大小写敏感)。

如果是从客户那里获得的远程库,不知道MySQL部署在什么操作系统上,想查看MySQL所在操作系统对大小写是否敏感、查看MySQL是否大小写敏感该怎么办呢?

不要着急,只需要执行下面这条命令就好了。

show variables like 'lower%';

复制代码

我们看到查出来的是两个参数名称和它们对应的值,那这两个参数分别是什么意思呢?杨公子带你慢慢研究。

参数 lower_case_file_system 表示数据目录所在的文件系统对文件名的大小写是否敏感。可取值有:NO、OFF。并且这是一个只读参数,无法被修改。

ON表示该文件系统对文件名的大小写不敏感;

OFF表示该文件系统对文件名的大小写敏感。

参数 lower_case_table_names 表示 Mysql设置大小写是否敏感。可取值有:0、1、2。这个参数不可以动态修改,修改后必须重启数据库才能生效。

当值为0时。使用CREATE TABLE或CREATE DATABASE语句指定的大小写字母在硬盘上保存表名和数据库名。名称比较时对大小写敏感。在大小写不敏感的操作系统如windows或Max OS x上我们不能将参数设为0,如果在大小写不敏感的文件系统上将“lower_case_table_names”强制设置为0,并使用不同的大小写访问MyISAM表名,可能会导致索引破坏。

当值为1时。表名和数据库名在硬盘上以小写保存,名称比较对大小写不敏感。MySQL将所有表名和数据库名转换为小写存储和查找表上。该行为也适合数据库名和表的别名,该值为Windows的默认值。

当值为2时。表名和数据库名在硬盘上使用CREATE TABLE或CREATE DATABASE语句指定的大小写字母进行保存,但MySQL将它们转换为小写在查找表上。名称比较对大小写不敏感,即按照大小写来保存,按照小写来比较。注意:只在对大小写不敏感的文件系统上适用!innodb表名用小写保存。

既然 lower_case_table_names 是一个可以修改的参数,那么怎么修改它呢?

非常简单,只需要按照你的需要,更改数据库参数文件my.cnf,在mysqld下 添加或修改 lower_case_table_names = 1,之后重启数据库就可以生效了。

忘了字段名吗

看到这里,还记得文章标题的同学可能想问杨公子了,说好的讨论库名、表名、字段名的大小写敏感问题吗?都写了这么多库名和表名的大小写敏感了,字段名是不是给忘了?

当然没有,杨公子记着呢。这就为大家解答字段名到底大小写敏感不敏感。

答案很简单——字段名大小写不敏感。

原因也很简单,因为字段名并不像库名、表名那样和操作系统的文件系统有密切的联系。所以字段名默认都是大小写不敏感的。

最 后

最后,我们来回顾总结一下。

字段名、字段别名、索引名、存储过程名……,只要不涉及目录和文件,任何平台都不分大小写;

Windows平台,数据库名、表名、表别名、触发器名等,也不分大小写;

Unix, Linux平台,数据库名、表名、表别名、触发器名等,就要区分大小写了

为了防止出现相同的代码在不同平台出现异常的情况,杨公子给出两种建议:

涉及到数据库、表、字段、触发器的命名,一律用小写;

在my.ini的[mysqld]段,加上“lower_case_table_names=1”。

好了,这篇文章到这里也要结束了,杨公子在这篇文章里和大家一起仔细地分析了“MySQL 库名、表名、字段名是否大小写敏感”的问题。相信大家现在对MySQL的大小写问题都有了清楚的认识,以后也能根据不同场景的不同需求来区分和使用相关的参数,完美地完成老板交代的任务了。

mysql 库名大小写_MySQL 库名、表名、字段名区分大小写吗???相关推荐

  1. MySQL数据通过SQL查询指定数据表的字段名及字段备注

    MySQL数据通过SQL查询指定数据表的字段名及字段备注 SELECT COLUMN_NAME,COLUMN_COMMENT FROM INFORMATION_SCHEMA.Columns WHERE ...

  2. mysql 最多查询数据库_mysql 查询全表某字段值最大的10条数据

    展开全部 select * from 表 order by 要最大值的字段 desc limit 0,10 FILE: 在MySQL服务器上读写文件.62616964757a686964616fe59 ...

  3. 在Mybaties中进行数据查询时,表中字段名和属相名没有对应起来,查询的结果总null,一下是解决方法

    http://blog.csdn.net/jiangsanfeng1111/article/details/49763135 在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同 ...

  4. 获取sqlserver数据库中所有库、表、字段名的方法

    获取sqlserver数据库中所有库.表.字段名的方法 2009年03月12日 星期四 下午 12:51 1.获取所有数据库名: SELECT Name FROM Master..SysDatabas ...

  5. 3、MySQL——SQLyog图形化客户端、表的字段名,常见数据类型的属性

    目录 一.SQLyog图形化客户端 二.创建数据表 1.语法格式: 2.表数据的设置 三.常见数据类型的属性 1.NULL和NOT NULL 2.DEFAULT--默认值 3.PRIMARY KEY- ...

  6. postgres 把一个表的值转成另一个表的字段名_Phoenix系列创建Phoenix映射表

    目前,在公司小部分的业务场景中有用到 Phoenix,但也仅限基于 Phoenix 的二级索引机制来进行查询上的优化.虽然使用的频次不大,但偶尔用到时,有些语句的使用方式和注意事项总记不太熟,每次都需 ...

  7. mysql忽略表名大小写_Mysql 表名忽略大小写-连接字符集随笔记录

    1.参数说明: lower_case_table_names=0表名存储为给定的大小和比较是区分大小写的 lower_case_table_names= 1表名存储在磁盘是小写的,但是比较的时候是不区 ...

  8. mysql常用表名大全_MySQL常用系统表大全

    MySQL5.7 默认的模式有:information_schema, 具有 61个表: m ysqL, 具有31个表: performance_schema,具有87个表; sys, 具有1个表, ...

  9. 修改mysql表的字段名_mysql中修改表字段名/字段长度/字段类型详解

    在mysql中我们对数据表字段的修改命令只要使用alter就可以了,下面我来给大家详细介绍mysql中修改表字段名/字段长度/字段类型等等一些方法介绍,有需要了解的朋友可参考. 先来看看常用的方法 M ...

最新文章

  1. 带你和Python与R一起玩转数据科学: 探索性数据分析(附代码)
  2. 智能车竞赛技术报告 | 节能信标组 - 宿迁学院 - MAkkaPakka
  3. 《深度学习:Java语言实现》一一1.3人工智能与深度学习
  4. Selenium代码示例
  5. FPGA时序约束、时序分析(一)
  6. Oracle 04-Oracle创建数据库
  7. HTML5-Ajax文件上传(转)
  8. SVM(1)-概念与理解
  9. Ubuntu 16.04 更换阿里云源
  10. 微信h5 支付,已经获得weixin://wap/pay?prepayid,但是无法调起微信客户端支付
  11. matlab做挖掘机仿真,基于Proe_Adams_Matlab挖掘机的机电液一体化仿真
  12. html标签(下)----常用高级标签
  13. 东北大学——应用数理统计——笔记
  14. 收集最火的开源项目——PHP 篇
  15. 牛客小白月赛24 D.牛妹吃豆子
  16. 3. 布莱叶盲文与二进制码
  17. 001 | “版绘童印”——疫情时代下版画在儿童插画中应用研究 | 大学生创新训练项目申请书 | 极致技术工厂
  18. 岳父岳母-寄快递的特殊方式
  19. 临时和持久化的网络驱动器映射
  20. 帆软BI绕过限制思路

热门文章

  1. typename与class
  2. bind函数:给对象绑定方法。
  3. Linux 命令(135)—— gpasswd 命令
  4. service: no such service mysqld 与 MySQL 的开启、关闭和重启
  5. 认识 size_t 和指针类型的大小
  6. db2函数写法简单说明
  7. Python入门基础学习记录(二)汇率案例学习记录
  8. 转- --python 3 编码
  9. God of War Ascension / 战神4, 再一次迎来新导演!
  10. Java同步组件之Condition,FutureTask