`
wwwsssaaaddd
  • 浏览: 2403 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

MYSQL数据库表名以及别名大小写敏感问题

阅读更多

知识点

MYSQL对于表名大小写敏感策略是通过lower_case_table_names参数来设定的,该参数可以在my.ini中配置,如下图所示:

     image001.jpg

 lower_case_table_names的取值和策略如下:

 

  • 0:大小写敏感策略。(unix、linux下的默认策略)
  • 1:大小写不敏感策略,对于创建的表名,即使一开始包含大写字母,在创建后将大写字母转为小写保存。(windows下的默认策略)
  • 2: 折中策略,对于创建时名称包含大写字​母的表名,在显示的时候仍然包含大写字母,但是在用于数据库表名的查找(比较)时,使用全小写的表名;

 

 

 

 

有大小写敏感问题的原因

u mysql的表空间文件处理上依赖于操作系统的文件处理策略,mysql在实现创建、修改、读取表空间文件是直接采用操作系统的文件操作接口。

      从Mysql源码目录mysys下的my_winfile.c的my_create函数,明显看到mysql在windows系统和其他系统创建文件的接口是不一样

PS:open、write、read是linux下c++的标准文件操作函数;my_win_open、my_win_write、my_win_read间接调用Windows C Run-Time library的CreateFile、WriteFile、ReadFile操作文件

 

u  windows和类Unix的文件系统对与大小写字母的处理策略不同:windows 的文件系统对大小写不敏感,而类Unix的是大小写敏感的;

由于在文件操作上mysql完全依赖OS文件系统,mysql自己不"做主"。 考虑成本,Mysql没有必要开发一套自己的FS

 

 

思考

如果在windows下强制把lower_case_table_names设置为0,使用mysql会出现什么样的问题?

从mysql启动的Warning中可以找到一些线索 :)

[Warning] You have forced lower_case_table_names to 0 through acommand-line option, even though your file system 'C:\MySQL Server 5.5\Data\' is case insensitive.  This means that you can corrupt a MyISAM table by accessing it with different cases. You should consider changing lower_case_table_names to 1 or 2

 

 

参考资料:

Mysql大小写敏感

http://www.cppblog.com/woaidongmao/archive/2009/03/26/77961.html 

了解 NFS 和文件名

http://technet.microsoft.com/zh-cn/library/cc778349(WS.10).aspx 

Mysql源码

http://www.oschina.net/code/explore/mysql-5.5.8/mysys/my_winfile.c 

 

 

 

 

 

分享到:
评论

相关推荐

    mysql大小写敏感

    MySQL 中的大小写敏感性是指数据库名、表名、列名、别名等在不同的操作系统平台上的大小写规则。 MySQL 在 Linux 下默认情况下是严格区分表名和数据库名的大小写,而在 Windows 下则不区分大小写。 在 Linux 下,...

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

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

    mysql表名忽略大小写配置方法详解

    MySQL数据库在处理表名、数据库名以及列名时的大小写规则可能会因操作系统的差异而有所不同。在Linux系统中,默认情况下MySQL是区分大小写的,而在Windows系统中则通常是不区分大小写的。对于开发者来说,保持一致性...

    MySQL的SQL语句大小写不敏感问题解决方案

    在 Linux 下,数据库名、表名、列名、别名的大小写规则是严格区分的,而在 Windows 下则不区分大小写。同时,在查询字符串时,MySQL 是大小写不敏感的,这也会导致大小写问题的产生。 在实际应用中,这个问题可能会...

    mysql数据库基础知识

    默认情况下,MySQL对于标识符(如表名、字段名等)是不区分大小写的。但为了保持代码的一致性和可读性,推荐使用统一的大小写规则,比如全部使用小写。 ##### 4. 模式匹配 在执行查询时,可以使用`LIKE`或`NOT LIKE...

    Linux系统MySQL忘记密码,重置密码,忽略表名、列名大小写的方法

    本文将详细介绍如何在Linux环境下重置MySQL密码,以及如何配置MySQL以忽略表名和列名的大小写差异。 首先,当你无法通过记忆中的密码登录MySQL时,可以采取以下步骤来重置密码: 1. 使用`su -`命令切换到root用户...

    详解MySQL查询时区分字符串中字母大小写的方法

    - **标识符(如数据库名和表名)**:在大多数情况下,MySQL不区分这些标识符的大小写,但在Unix-like系统(除Mac OS HFS+外)上是区分大小写的,而在Windows上通常不区分。 - **表的别名**:别名不区分大小写,如`...

    mysql数据库原理演示记录

    最后,对于操作中可能出现的大小写字母的切换,文件中也提供了一些快捷键,如Ctrl+Shift+K、Ctrl+Shift+A和Shift+F3,这些都是在MySQL命令行工具或兼容工具中,用于控制字母大小写格式的便捷方式。 这份演示记录的...

    有关MySQL数据库与标准的兼容性问题 电脑资料.docx

    数据库和表名在区分大小写的文件系统中是区分大小写的。因此,创建和管理数据库和表时需要注意文件名的大小写一致性。 6. **特殊语法**: - **LIKE**:在数字列上也可以使用LIKE操作符。 - **INTO OUTFILE**:...

    MySQL网络数据库指南003

    在MySQL中,数据库、表、列、索引和别名的命名是区分大小写的,并且有特定的字符限制和长度限制。名称可以由字母、数字、下划线和美元符号组成,但不能仅由数字开头,以避免与数值混淆。数据库、表、列和索引的名称...

    MYSQL的sql语法学习

    大小写规则方面,SQL关键字和函数名不区分大小写,而数据库名和表名是否区分大小写取决于操作系统文件系统的大小写敏感性。字段名和索引名在所有操作系统中都不区分大小写,但别名是区分大小写的。 接下来,对...

    第03章_基本的SELECT语句.docx

    在 MySQL 中,数据库名、表名、表的别名、变量名是严格区分大小写的,而关键字、函数名、列名(或字段名)、列的别名(字段的别名)是忽略大小写的。 为提高代码的可读性,建议使用统一的书写规范,例如数据库名、...

    掌握 SQL 这些经典核心知识点,不担心饭碗了.pdf

    - **大小写敏感性**:MySQL 不区分关键字、函数名等的大写和小写,但对于数据值是否区分大小写取决于所使用的字符集和校对规则。比如,“ci”表示大小写不敏感,“cs”表示大小写敏感。 - **命名规范**:推荐使用...

    MySQL语言语句.docx

    名称区分大小写,但在大多数配置下,表名和数据库名对大小写不敏感。特殊字符如空格、破折号(-)和下划线(_)可能需要转义或者避免使用,具体取决于服务器配置。 总结,MySQL的字符串处理涉及引号、转义字符和特殊...

    MySQL命令大全

    进入mysql数据库控制台, 如mysql -u root -p mysql>use 数据库 然后使用source命令,后面参数为脚本文件(如这里用到的.sql) mysql>source wcnc_db.sql B:使用mysqldump命令 mysqldump -u username -p dbname ...

    数据库设计和开发规范

    1. **大小写敏感**:所有SQL语句应使用大小写敏感的方式编写,以提高代码的可读性和一致性。 2. **Unicode数据类型优先**:为了确保数据的完整性和跨平台兼容性,建议优先使用Unicode数据类型。 3. **连接优于子查询...

    Mysql入门知识点总结-思维导图版

    在MySQL中,SQL语句的关键字通常建议使用大写,虽然大部分情况下不区分大小写。SQL主要分为四大类: 1. DDL(Data Definition Language):定义数据库对象,如创建和删除数据库、表等。 - 创建数据库:`CREATE ...

    个人MySQL学习资料

    大小写敏感性 - **说明**:SQL语句在MySQL中不区分大小写。 - **示例**:`select * from table_name;` 与 `SELECT * FROM TABLE_NAME;` 是相同的。 #### 3. 字符串表示 - **规则**:字符串统一使用单引号`'`括起来...

Global site tag (gtag.js) - Google Analytics