在MySQL
中,数据库对应数据目录中的目录。数据库中的每个表至少对应数据库目录中的一个文件(
也可能是多个,取决于存储引擎)
。因此,所使用操作系统的大小写敏感性决定了数据库名和表名的大小写敏感性。这说明在大多数Unix
中数据库名和表名对大小写敏感,而在Windows
中对大小写不敏感。一个显著的例外情况是Mac
OS
X
,它基于Unix
但使用默认文件系统类型(HFS+)
,对大小写不敏感。然而,Mac
OS
X
也支持UFS
卷,该卷对大小写敏感,就像Unix
一样。参见1.8.4节,“MySQL对标准SQL的扩展”
。
注释:
尽管在某些平台中数据库名和表名对大小写不敏感,不应在同一查询中使用不同的大小写来引用给定的数据库或表。下面的查询不会工作,因为它同时引用了表my_tables
和as
MY_tables
:
mysql>
SELECT * FROM my_table WHERE MY_TABLE.col=1;
列、索引、存储子程序和触发器名在任何平台上对大小写不敏感,列的别名也不敏感。
默认情况,表别名在Unix
中对大小写敏感,但在Windows
或Mac
OS
X
中对大小写不敏感。下面的查询在Unix
中不会工作,因为它同时引用了别名a
和A
:
mysql>
SELECT col_name
FROM tbl_name
AS a
->
WHERE a.col_name
= 1 OR A.col_name
= 2;
然而,该查询在Windows
中是可以的。要想避免出现差别,最好采用一致的转换,例如总是用小写创建并引用数据库名和表名。在大多数移植和使用中建议使用该转换。
在MySQL
中如何在硬盘上保存和使用表名和数据库名由lower_case_tables_name
系统变量确定,可以在启动mysqld
时设置。lower_case_tables_name
可以采用下面的任一值:
值
|
含义
|
0
|
使用CREATE TABLE
或CREATE
DATABASE
语句指定的大写和小写在硬盘上保存表名和数据库名。名称比较对大小写敏感。在Unix
系统中的默认设置即如此。请注意如果在大小写不敏感的文件系统上用--lower-case-table-names=0
强制设为0
,并且使用不同的大小写访问MyISAM
表名,会导致索引破坏。
|
1
|
表名在硬盘上以小写保存,名称比较对大小写敏感。MySQL
将所有表名转换为小写以便存储和查找。该行为也适合数据库名和表的别名。该值为Windows
和Mac
OS X
系统中的默认值。
|
2
|
表名和数据库名在硬盘上使用CREATE TABLE
或CREATE
DATABASE
语句指定的大小写进行保存,但MySQL
将它们转换为小写以便查找。名称比较对大小写敏感。注
释:
只
在对大小写不敏感的文件系统上适用!
InnoDB
表名以小写保存,例如lower_case_tables_name=1
。
|
在Windows
和Mac OS
X
中,lower_case_tables_name
的
默认值是1
。
如果只在一个平台上使用MySQL
,通常不需要更改lower_case_tables_name
变量。然而,如果你想要在对大小写敏感不同的文件系统的平台之间转移表,会遇到困难。例如,在Unix
中,my_tables
和MY_tables
是两个不同的表,但在Windows
中,这两个表名相同。要想避免由于数据库或表名的大小写造成的数据转移问题,可使用两个选项:
·
在任何系统中可以使用lower_case_tables_name=1
。使用该选项的不利之处是当使用SHOW
TABLES
或SHOW DATABASES
时,看不出名字原来是用大写还是小写。
·
在Unix
中使用lower_case_tables_name=0
,在Windows
中使用lower_case_tables_name=2
。这样了可以保留数据库名和表名的大小写。不利之处是必须确保在Windows
中查询总是用正确大小写引用数据库名和表名。如果将查询转移到Unix
中,由于在Unix
中大小写很重要,如果大小写不正确,它们不工作。
例外
:如果你正使用InnoDB
表,在任何平台上均应将lower_case_tables_name
设置为1
,以强制将名转换为小写。
请注意在Unix
中将lower_case_tables_name
设置为1
之前,重启mysqld
之前,必须先将旧的数据库名和表名转换为小写
相关推荐
然而,在8.0版本中,MySQL对此进行了重大改动:该参数现在只能在服务器初始化时进行配置,并且默认值在不同的操作系统上有区别——Windows下默认为1(大小写不敏感),而在Linux下则保持不变,仍为0(大小写敏感)。...
尽管列名在大多数情况下不区分大小写,但如果你想在查询时区分字段值的大小写,可以对字段设置BINARY属性。BINARY属性确保比较时考虑字符的ASCII值,而不是忽略大小写。有三种方式可以设置BINARY属性: A. 创建表时...
通过对SQL Server和MySQL中区分大小写的设置进行深入了解,我们可以更好地根据实际需求调整数据库的行为。无论是创建表时指定字段属性、查询时动态控制还是更改现有表的设置,这些方法都为我们提供了灵活的手段来...
MySQL 在 Linux 下默认情况下是严格区分表名和数据库名的大小写,而在 Windows 下则不区分大小写。 在 Linux 下,MySQL 的默认设置是区分表名的大小写,不区分列名的大小写。可以通过添加 lower_case_table_names=...
此外,尽管设置为1可以使MySQL在逻辑上不区分大小写,但为了保持一致性,建议在定义表名和编写SQL语句时始终使用小写,避免因大小写问题引起不必要的困扰。 在开发过程中,特别是涉及跨平台的应用,了解并适当地...
2. **Linux环境**:而在Linux环境下,默认情况下MySQL严格区分大小写,这意味着在创建表或引用表时必须确保名称完全匹配(包括大小写)。 这种行为差异往往会成为从Windows环境迁移到Linux环境时的一个常见陷阱。 ...
在 Linux 下,数据库名、表名、列名、别名的大小写规则是严格区分的,而在 Windows 下则不区分大小写。同时,在查询字符串时,MySQL 是大小写不敏感的,这也会导致大小写问题的产生。 在实际应用中,这个问题可能会...
MySQL是一种广泛使用的开源关系型数据库管理系统,其默认配置在处理表名、列名以及数据库名时通常是不区分大小写的。然而,根据业务需求,有时我们需要让MySQL对这些名称进行大小写敏感的处理,例如在开发多语言应用...
在Linux系统中,默认情况下,MySQL是严格区分大小写的,这与Windows环境下的行为形成鲜明对比,后者默认不区分大小写。本文将深入探讨如何在Linux下通过修改MySQL配置,使查询操作中表名的大小写变得不敏感。 ### ...
在本文中,我们将探讨如何在Windows和Linux操作系统上设置MySQL使其不区分大小写。 首先,我们要了解`lower_case_table_names`这个配置选项。这是一个用于控制MySQL服务器如何处理表名和数据库名大小写的参数。当`...
假设在一个区分大小写的Linux系统上,如果使用以下命令创建了一个名为`User`的表: ```sql CREATE TABLE User ( id INT PRIMARY KEY, name VARCHAR(50) ); ``` 在默认情况下(`lower_case_table_names = 1`),...
1. `lower_case_table_names = 0`:在这种模式下,MySQL区分大小写。表名在数据库中以用户输入的大小写形式存储,并在查询时保持大小写敏感。这是默认设置。 2. `lower_case_table_names = 1`:在这个配置下,MySQL...
- **不区分表名大小写**:在`[mysqld]`段落中添加`lower_case_table_names = 1`。 #### 八、设置字符集 为了支持中文,需要将MySQL的默认编码修改为`gbk`或`utf8`: 1. **中止MySQL服务**: ```bash bin/...
在大多数Unix系统中,包括Linux,文件系统通常是大小写敏感的,因此MySQL也会对数据库名和表名区分大小写。然而,在Windows系统中,文件系统通常是大小写不敏感的,MySQL在这种情况下也不会区分数据库和表名的大小写...
说明: MySQL 在 Windows 下不区分大小写,但在 Linux 下默认是区分大小写。因此,数据库名、 表名、字段名,都不允许出现任何大写字母,避免节外生枝。 正例: aliyun _ admin , rdc _ config , level 3_
- 编辑 `/etc/my.cnf` 文件,添加 `lower_case_table_names=1` 行,以确保表名不区分大小写。 ##### 2.8 设置环境变量 - 在 `/etc/profile` 文件末尾添加 `export PATH=/usr/local/mysql/bin:$PATH`。 - 使用 `...
如果你想在Windows上使MySQL区分大小写,你需要修改MySQL的配置文件`my.ini`,添加或修改`lower_case_table_names`为0。这将使MySQL在Windows上也开始区分表名的大小写。 2. **Linux下的设置**: 相反,如果你想...