mysql8为什么要开启mysql5中原先的表名称大小写不敏感变成大小写敏感?
MySQL 8.0 对于表名的大小写敏感性的默认设置并没有变更。在 UNIX-like 系统中,表名是大小写敏感的,而在 Windows 中,它们是大小写不敏感的。这与文件系统的行为有关。因为在 UNIX-like 系统中,InnoDB 表是由文件表示的,文件名的大小写敏感性与文件系统的大小写敏感性一致。
如果你遇到了 MySQL 8.0 在这方面的行为变化,可能是因为以下几个原因:
-
配置改变:
lower_case_table_names
系统变量用于控制数据库对象名称的大小写敏感性。这个变量的默认值可能会根据操作系统和文件系统的不同而不同。如果这个值被修改,那么大小写敏感性的行为也会改变。 -
移植问题: 如果你从一个系统迁移到了另一个系统(例如从 Windows 迁移到 Linux),那么大小写敏感性的行为可能会变化。
-
推荐的做法: 虽然可以通过配置改变大小写敏感性的行为,但为了避免跨平台移植时的问题,推荐的做法是始终以一种大小写风格创建和访问表,不论在什么平台上。
总的来说,MySQL 8.0 本身并没有改变关于表名大小写敏感性的默认行为。如果你在实践中发现了不同的行为,可能是因为上述原因或其他配置问题。
MySQL8中表名称的大小写是不敏感的吗?
在 MySQL 中,表名的大小写敏感性取决于操作系统和MySQL的配置。
-
UNIX-like 系统: 在 UNIX-like 的操作系统中(例如 Linux),默认情况下,表名是大小写敏感的。这是因为在这些系统中,InnoDB 表的数据是以文件形式存储的,文件名是大小写敏感的。
-
Windows: 在 Windows 系统中,表名默认是大小写不敏感的。
-
配置影响: MySQL 的
lower_case_table_names
系统变量决定了表名的大小写敏感性。这个变量有三个可能的值:0
: 表名存储为给定的大小写,比较也是大小写敏感的。这通常是 UNIX-like 系统的默认设置。1
: 表名在磁盘上存储为小写,但比较是大小写不敏感的。这通常是 Windows 系统的默认设置。2
: 表名存储为给定的大小写,但比较是大小写不敏感的。这在某些 UNIX-like 系统中可以使用,但不建议这样做。
对于 MySQL 8.0,这些行为没有与早期版本的 MySQL 有显著不同。所以,在 MySQL 8.0 的 UNIX-like 系统上,默认情况下,表名是大小写敏感的。如果你在使用中发现不同的行为,可能是因为配置或其他外部因素的影响。
UNIX-like 系统的Linux版本有哪些能给我举例吗?
当我们说到 “UNIX-like” 或 “类UNIX” 系统时,我们指的是那些遵循 UNIX 原则和设计哲学的操作系统。Linux 就是其中最流行的一种。但除了 Linux,还有许多其他的 UNIX-like 系统。以下是一些例子:
-
Linux: 这实际上是一个大家族,因为有很多基于 Linux 内核的发行版。例如:
- Ubuntu
- Debian
- Fedora
- CentOS
- Red Hat Enterprise Linux (RHEL)
- Arch Linux
- openSUSE
- Slackware
- Gentoo
… 以及许多其他发行版。
-
BSD: 这是 UNIX 的另一个大家族,有以下几个主要的变种:
- FreeBSD
- OpenBSD
- NetBSD
- DragonFly BSD
-
macOS (之前称为 Mac OS X): Apple 的操作系统是基于 NeXTSTEP 和 BSD 的,因此也是一个 UNIX-like 系统。
-
Solaris: 最初由 Sun Microsystems 开发,后来被 Oracle 采购。这是一个商业 UNIX 系统,但也有一个开源版本叫做 OpenSolaris(现在不再活跃)。
-
AIX: 由 IBM 开发的 UNIX 系统,用于其自家的服务器硬件。
-
HP-UX: 由 Hewlett-Packard 开发的 UNIX 系统,用于其自家的服务器硬件。
这些只是最知名的 UNIX-like 系统的例子。实际上,还有许多其他的 UNIX 变种和派生系统。