`

MySql 识别符大小写敏感性

 
阅读更多

MySQL中,数据库对应数据目录中的目录。数据库中的每个表至少对应数据库目录中的一个文件(也可能是多个,取决于存储引擎)。因此,所使用操作系统的大小写敏感性决定了数据库名和表名的大小写敏感性。这说明在大多数Unix中数据库名和表名对大小写敏感,而在Windows中对大小写不敏感。一个显著的例外情况是Mac OS X,它基于Unix但使用默认文件系统类型(HFS+),对大小写不敏感。然而,Mac OS X也支持UFS卷,该卷对大小写敏感,就像Unix一样。参见1.8.4节,“MySQL对标准SQL的扩展”

注释:尽管在某些平台中数据库名和表名对大小写不敏感,不应在同一查询中使用不同的大小写来引用给定的数据库或表。下面的查询不会工作,因为它同时引用了表my_tablesas MY_tables

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

列、索引、存储子程序和触发器名在任何平台上对大小写不敏感,列的别名也不敏感。

默认情况,表别名在Unix中对大小写敏感,但在WindowsMac OS X中对大小写不敏感。下面的查询在Unix中不会工作,因为它同时引用了别名aA

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 TABLECREATE DATABASE语句指定的大写和小写在硬盘上保存表名和数据库名。名称比较对大小写敏感。在Unix系统中的默认设置即如此。请注意如果在大小写不敏感的文件系统上用--lower-case-table-names=0强制设为0,并且使用不同的大小写访问MyISAM表名,会导致索引破坏。

1

表名在硬盘上以小写保存,名称比较对大小写敏感。MySQL将所有表名转换为小写以便存储和查找。该行为也适合数据库名和表的别名。该值为WindowsMac OS X系统中的默认值。

2

表名和数据库名在硬盘上使用CREATE TABLECREATE DATABASE语句指定的大小写进行保存,但MySQL将它们转换为小写以便查找。名称比较对大小写敏感。释:在对大小写不敏感的文件系统上适用! InnoDB表名以小写保存,例如lower_case_tables_name=1

WindowsMac OS X中,lower_case_tables_name的 默认值是1

如果只在一个平台上使用MySQL,通常不需要更改lower_case_tables_name变量。然而,如果你想要在对大小写敏感不同的文件系统的平台之间转移表,会遇到困难。例如,在Unix中,my_tablesMY_tables是两个不同的表,但在Windows中,这两个表名相同。要想避免由于数据库或表名的大小写造成的数据转移问题,可使用两个选项:

·         在任何系统中可以使用lower_case_tables_name=1。使用该选项的不利之处是当使用SHOW TABLESSHOW 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之前,必须先将旧的数据库名和表名转换为小写。

分享到:
评论

相关推荐

    MySQL数据库大小写敏感的问题

    MySQL数据库在处理数据库名、表名以及列名时的大小写敏感性问题是一个常见的困扰,尤其是在跨不同操作系统环境时。MySQL的行为受所运行的操作系统的影响,因为数据库名和表名实际上对应于数据目录中的文件名。在...

    LINUX系统下mysql的大小写区分问题.docx

    需要注意的是,尽管可以通过这些方法来控制大小写敏感性,但最佳实践是始终以一种一致的方式编写数据库对象的名称,避免因大小写问题引发的混淆和错误。在开发和维护过程中,保持命名规范和一致性至关重要,尤其是当...

    使MySQL查询区分大小写.doc

    在MySQL中,查询默认情况下通常是不区分大小写的,但如果你想让你的查询对大小写敏感,有几种方法可以实现。以下是一些关键知识点和步骤来帮助你在MySQL中进行区分大小写的查询。 1. **设置列的Collation** - **...

    MySQL大小写敏感导致的问题分析

    MySQL数据库在处理表名、字段名时的大小写敏感性是一个常见的问题,尤其是在跨平台部署时。MySQL在Windows操作系统上默认是不区分大小写的,而在Linux操作系统上则是区分大小写。这种差异可能导致在本地开发环境中...

    MySql 5.1 参考手册.chm

    9.2.2. 识别符大小写敏感性 9.3. 用户变量 9.4. 系统变量 9.4.1. 结构式系统变量 9.5. 注释语法 9.6. MySQL中保留字的处理 10. 字符集支持 10.1. 常规字符集和校对 10.2. MySQL中的字符集和校对 10.3. 确定默认字符...

    库名表名大小写问题与sqlserver兼容的启动配置方法

    在处理大小写敏感性方面,这些差异可能会导致兼容性问题,尤其是在跨平台或混合环境的操作中。本篇文章将详细介绍如何解决MySQL中的库名表名大小写问题以及使其与SQL Server兼容的启动配置方法。 MySQL默认在Linux...

    MySQL 5.1参考手册

    9.2.2. 识别符大小写敏感性 9.3. 用户变量 9.4. 系统变量 9.4.1. 结构式系统变量 9.5. 注释语法 9.6. MySQL中保留字的处理 10. 字符集支持 10.1. 常规字符集和校对 10.2. MySQL中的字符集和校对

    MySQL 5.1中文手冊

    9.2.2. 识别符大小写敏感性 9.3. 用户变量 9.4. 系统变量 9.4.1. 结构式系统变量 9.5. 注释语法 9.6. MySQL中保留字的处理 10. 字符集支持 10.1. 常规字符集和校对 10.2. MySQL中的字符集和校对 10.3. 确定默认字符...

    mysql官方中文参考手册

    9.2.2. 识别符大小写敏感性 9.3. 用户变量 9.4. 系统变量 9.4.1. 结构式系统变量 9.5. 注释语法 9.6. MySQL中保留字的处理 10. 字符集支持 10.1. 常规字符集和校对 10.2. MySQL中的字符集和校对 10.3. 确定默认字符...

    Mysql\学习笔记\mysql优化

    4. 大小写敏感性:MySQL默认情况下,数据库名、表名和列名的大小写敏感性取决于操作系统的设置。在Linux系统上,它们通常是大小写敏感的,而在Windows上,通常不敏感。这在编写SQL语句时需要注意。 SQL优化步骤: ...

    MsSql数据导入MySql

    4. **大小写敏感性**:MySQL默认是区分大小写的,而MSSQL通常不区分。可能需要调整MySQL的表名、列名或索引的大小写设置。 5. **约束检查**:确保数据符合MySQL表的约束,如主键、外键、唯一性等。 在文件列表中,`...

    MySQL 5.1参考手册 (中文版)

    9.2.2. 识别符大小写敏感性 9.3. 用户变量 9.4. 系统变量 9.4.1. 结构式系统变量 9.5. 注释语法 9.6. MySQL中保留字的处理 10. 字符集支持 10.1. 常规字符集和校对 10.2. MySQL中的字符集和校对 10.3. 确定默认字符...

    MySQL 5.1参考手册中文版

    9.2.2. 识别符大小写敏感性 9.3. 用户变量 9.4. 系统变量 9.4.1. 结构式系统变量 9.5. 注释语法 9.6. MySQL中保留字的处理 10. 字符集支持 10.1. 常规字符集和校对 10.2. MySQL中的字符集和校对 10.3. 确定...

    人大金仓数据库适配mysql

    - KingbaseES默认使用大小写敏感模式,因此所有列名都应转换为大写或小写,避免大小写混用导致识别问题。 **2. `NLSSORT` 函数** - KingbaseES不支持 `NLSSORT` 函数。 **3. `GROUP BY` 语句** - KingbaseES对 `...

    MYSQL中文手册

    9.2.2. 识别符大小写敏感性 9.3. 用户变量 9.4. 系统变量 9.4.1. 结构式系统变量 9.5. 注释语法 9.6. MySQL中保留字的处理 10. 字符集支持 10.1. 常规字符集和校对 10.2. MySQL中的字符集和校对 10.3. 确定...

    MySQL 5.1官方简体中文参考手册

    9.2.2. 识别符大小写敏感性 9.3. 用户变量 9.4. 系统变量 9.4.1. 结构式系统变量 9.5. 注释语法 9.6. MySQL中保留字的处理 10. 字符集支持 10.1. 常规字符集和校对 10.2. MySQL中的字符集和校对 10.3. 确定默认字符...

    mysql5.1中文手册

    识别符大小写敏感性 9.3. 用户变量 9.4. 系统变量 9.4.1. 结构式系统变量 9.5. 注释语法 9.6. MySQL中保留字的处理 10. 字符集支持 10.1. 常规字符集和校对 10.2. MySQL中的字符集和校对...

    MySQL的命名规则.pdf

    - 名称大小写敏感性取决于服务器的操作系统,但在UNIX系统中通常不区分大小写。 - 在Windows系统中,命名规则相对宽松,例如可包含空格,但为了跨平台兼容性,不建议使用。 - 为了避免潜在的命名冲突,建议以项目名...

    oracl转mysql注意事项

    大小写敏感性** - **问题描述**:MySQL默认情况下区分大小写,这可能导致Oracle数据库中的表名或字段名在MySQL中无法识别。 - **解决方案**:在迁移前,调整MySQL的配置使其不区分大小写。 **7. 数值类型处理** ...

Global site tag (gtag.js) - Google Analytics