MySQL数据库名、表名大小写问题

在MySQL中,数据库对应操作系统数据目录中的目录,数据库中的每个表至少对应数据库目录中的一个文件(也可能是多个,取决于存储引擎)。因此,所使用操作系统的大小写敏感性决定了数据库名以及表名的大小写敏感性。这说明在大多数Unix中数据库名和表名对大小写敏感,而在windows中对大小写不敏感。

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

对于类Unix系统:

  • 数据库名和表名是严格区分大小写的
  • 表的别名是严格区分大小写的
  • 列名与列别名在所有情况下均是忽略大小写的
  • 变量名也是严格区分大小写的

对于win系统:

  • 全部不区分大小写

MySQL如何在硬盘上保存和使用表名和数据库名,是由lower_case_tables_name系统变量确定,可以在启动mysqld时设置。

  • If set to 0, table names are stored as specified and comparisons are case sensitive.
  • If set to 1, table names are stored in lowercase on disk and comparisons are not case sensitive.
  • If set to 2, table names are stored as given but compared in lowercase. This option also applies to database names and table aliases.

Unix平台上默认lower_case_tables_name=0

MySQL在查询或者字符串比较的时候,也是大小写不敏感的。可以指定 BINARY关键字以区分大小写。

如果只在一个平台上使用MySQL,通常不需要更改lower_case_tables_name 变量。然而,如果你想要在对大小写敏感不同的文件系统的平台之间转移表,会遇到问题。

命名规范

为了避免大小写引发的问题,一种推荐的命名规则是:在定义数据库/表/列的时候全部采用小写字母+下划线形式,不使用任何大写字母。

如果你使用InnoDB引擎,在任何平台上均应用lower_case_tables_name=1,以强制将名转换为小写。请注意在Unix系统中将lower_case_tables_name设置为1之前,重启mysqld之前,必须先将原来的数据库名以及表名全部转换为小写。

时间: 2024-10-24 04:42:06

MySQL数据库名、表名大小写问题的相关文章

MySQL数据库修改表名

MySQL数据库修改表名,比如把表FaceAppVersion 修改为AppVersion,SQL如下: rename table FaceAppVersion to AppVersion; 执行如下: rename table FaceAppVersion to AppVersion > OK > 时间: 0.033s 原文地址:https://www.cnblogs.com/JohanChan/p/12058967.html

设置Linux中的Mysql不区分表名大小写

1. MySQL数据库的表名在Linux系统下是严格区分大小写的,在Windows系统下开发的程序移植到Linux系统下,如果程序中SQL语句没有严格按照大小写访问数据库表,就可能会出现找不到表的错误. 2. 解决办法是:修改MySQL的配置文件my.cnf,在[mysqld]部分添加如下配置选项lower_case_table_names = 1,重启MySQL服务即可. 3. 但这个办法治标不治本,根本的解决办法是遵从跨平台开发的好的实践,例如SQL语句中的库名.表名.字段名等等要严格区分大

linux mysql不区分表名大小写配置

原来Linux下的MySQL默认是区分表名大小写的,通过如下设置,可以让MySQL不区分表名大小写:1.用root登录,修改 /etc/my.cnf:2.在[mysqld]节点下,加入一行: lower_case_table_names=1(值为0时区分大小写)3.重启MySQL即可: MySQL在Linux下数据库名.表名.列名.别名大小写规则是这样的:1)数据库名与表名是严格区分大小写的:2)表的别名是严格区分大小写的:3)列名与列的别名在所有的情况下均是忽略大小写的:4)变量名也是严格区分

MySQL获取Schema表名和字段信息

MySQL获取Schema表名和字段信息 获取表名 select TABLE_NAME,TABLE_TYPE,ENGINE,TABLE_ROWS,TABLE_COMMENT,CREATE_TIME,UPDATE_TIME, CHECK_TIME from information_schema.TABLES where TABLE_SCHEMA='t_shop' ; 获取字段名 select COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,IS_NUL

mysql修改数据表名

在使用mysql时,经常遇到表名不符合规范或标准,但是表里已经有大量的数据了,如何保留数据,只更改表名呢? 可以通过建一个相同的表结构的表,把原来的数据导入到新表中,但是这样视乎很麻烦. 能否简单使用一个SQL语句就搞定呢?当然可以,mysql5.0下我们使用这样的SQL语句就可以了. ALTER  TABLE table_name RENAME TO new_table_name 例如 ALTER  TABLE admin_user RENAME TO a_user mysql修改数据表名

mysql java 根据表名转为javaBean,下划线转驼峰,带注释,部分常用类型匹配。

-- mysql java 根据表名转为javaBean,下划线转驼峰,带注释,部分常用类型匹配 select concat( '/** ', COLUMN_COMMENT, ' */', 'private ', (case DATA_TYPE when 'varchar' then 'String ' when 'int' then 'Integer ' when 'double' then 'double ' when 'float' then 'double ' when 'datetim

MYSQL数据库建表注意事项

1.库名.表名.字段名必须使用小写字母,"_"分割. 原因: MySQL在Linux下数据库名.表名.列名.别名大小写规则是这样的: 1.数据库名与表名是严格区分大小写的: 2.表的别名是严格区分大小写的: 3.列名与列的别名在所有的情况下均是忽略大小写的: 4.变量名也是严格区分大小写的:MySQL在Windows下都不区分大小写. 所以在不同操作系统中为了能使程序和数据库都能正常运行,最好的办法是在设计的时候都转为小写,但是如果在设计的时候已经规范化大小写了,那么在Windows环

MySQL数据库以及表的管理

MySQL数据库以及表的管理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 今天我们探讨的话题就是如何使用MySQL做开发,我们运维的主要工作不是去开发SQL的,但尽管如此,我们有可能需要对别人写出来的复杂SQL语句做性能评估,去分析他们写的SQL语句是不是足够高效,如果不是的话,我们还要能够达到对对方的SQL语句做改写的能力.所以,我们无需自行去开发SQL,但是我们一定要有一个看懂别人写的SQL的能力哟! 一.DBA的职责 1.开发DBA: 负责数据库设计(E-R关系图).

MySQL 数据库分表分区

博主QQ:819594300 博客地址:http://zpf666.blog.51cto.com/ 有什么疑问的朋友可以联系博主,博主会帮你们解答,谢谢支持!一.分表 为什么要分表? 我们的数据库数据越来越大,随之而来的是单个表中数据太多.以至于查询书读变慢,而且由于表的锁机制导致应用操作也搜到严重影响,出现了数据库性能瓶颈. 什么是分表? 分表是将一个达标按照一定的规则分解成多张具有独立存储空间的实体表,每个表都对应三个文件,.MYD数据文件..MYI索引文件..frm表结构文件.这些表可以分

Mysql数据库,表中有中文时,select出来好多问号(?)的解决方法

在QQ群里问了一些高手,同时参考了这篇文章:http://huangyunbin.iteye.com/blog/1113983,终于把这个问题搞定了. 首先,我用的是zip包的Mysql,直接解压使用的,网上说修改my.ini或者my.cnf在我机器上根本就找不到.但是my.ini这个东西是可以自己添加的.将mysql目录中的my-default.ini文件复制一份(原来的模板还是留一份不要乱动的好),重命名为my.ini.打开my.ini,在最后添上如下两行: [mysql] default-