首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

mysql 大小写同名表名

基础概念

MySQL中的表名大小写敏感性取决于操作系统和MySQL配置文件(my.cnf或my.ini)中的设置。在Linux系统中,默认情况下,MySQL表名是区分大小写的;而在Windows系统中,默认情况下是不区分大小写的。可以通过修改MySQL配置文件中的lower_case_table_names参数来改变这一行为。

相关优势

  • 区分大小写:可以更精确地控制表名的使用,避免因大小写不同而导致的混淆。
  • 不区分大小写:简化表名的使用,减少因大小写不同而导致的错误。

类型

  • 区分大小写的表名:在Linux系统或配置了lower_case_table_names=0的MySQL实例中,表名是区分大小写的。
  • 不区分大小写的表名:在Windows系统或配置了lower曲_table_names=1lower_case_table_names=2的MySQL实例中,表名是不区分大小写的。

应用场景

  • 区分大小写:适用于对表名大小写有严格要求的场景,如需要区分不同环境(开发、测试、生产)中的同名表。
  • 不区分大小写:适用于表名大小写不敏感的场景,如大多数Web应用,用户输入的表名通常不会严格区分大小写。

遇到的问题及解决方法

问题:为什么在Linux系统中创建了两个大小写不同的同名表,却只能访问到一个?

原因:Linux系统默认区分文件名大小写,MySQL也继承了这一特性。如果lower_case_table_names=0,MySQL会严格区分表名的大小写。

解决方法

  1. 检查MySQL配置
  2. 检查MySQL配置
  3. 如果返回值为0,表示MySQL区分大小写。
  4. 修改MySQL配置: 编辑MySQL配置文件(通常是/etc/my.cnf/etc/mysql/my.cnf),将lower_case_table_names设置为1或2:
  5. 修改MySQL配置: 编辑MySQL配置文件(通常是/etc/my.cnf/etc/mysql/my.cnf),将lower_case_table_names设置为1或2:
  6. 然后重启MySQL服务:
  7. 然后重启MySQL服务:
  8. 重新创建表: 如果已经存在大小写不同的同名表,可以先删除其中一个,再重新创建:
  9. 重新创建表: 如果已经存在大小写不同的同名表,可以先删除其中一个,再重新创建:

示例代码

代码语言:txt
复制
-- 检查lower_case_table_names设置
SHOW VARIABLES LIKE 'lower_case_table_names';

-- 修改MySQL配置文件
sudo nano /etc/my.cnf

-- 添加或修改以下行
[mysqld]
lower_case_table_names = 1

-- 重启MySQL服务
sudo systemctl restart mysqld

-- 删除并重新创建表
DROP TABLE IF EXISTS table_name;
CREATE TABLE table_name (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255));

参考链接

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

关于MySQL库表大小写问题

默认情况下,库表在 Windows 系统下是不区分大小写的,而在 Linux 系统下是区分大小写的。列名,索引,存储过程、函数及事件名称在任何操作系统下都不区分大小写,列别名也不区分大小写。...下面再来看下各个值的具体含义: Value Meaning 0 库表以创建语句中指定的字母大小写存储在磁盘上,名称比较区分大小写。 1 库表以小写形式存储在磁盘上,名称比较不区分大小写。...MySQL 在存储和查找时将所有表转换为小写。此行为也适用于数据库名称和表别名。 2 库表以创建语句中指定的字母大小写存储在磁盘上,但是 MySQL 在查找时将它们转换为小写。...通过以上实验我们发现 lower_case_table_names 参数设为 0 时,MySQL 库表是严格区分大小写的,而且表别名同样区分大小写但列名不区分大小写,查询时也需要严格按照大小写来书写...推荐阅读 (点击标题可跳转阅读) 带你看懂MySQL执行计划 重命名表,应该怎么做? MySQL慢日志全解析! - End -

7.5K32

mysql linux环境下表区分大小写问题

在linux环境下表是区分大小写的 问题 执行SHOW VARIABLES LIKE '%lowercasetable_names%' 输出结果: ?...其中 0:区分大小写,1:不区分大小写 解决办法 在mysql的配置文件中添加 lowercasetable_names=1 实际解决方式 先查找mysql使用的配置文件 添加配置 重启mysql 查看是否生效...order of preference, my.cnf, $MYSQL_TCP_PORT, /etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf...datadir=/work1/soft/mysql/data socket=/work1/soft/mysql/mysql.sock #设置忽略大小写(简单来说就是sql语句是否严格),默认库名表保存为小写..., 不区分大小写 lower_case_table_names=1 # 开启ip绑定 #bind-address = 0.0.0.0 [mysqld_safe] log-error=/var/log/mysqld.log

2.4K20
  • mysql忽略大小写问题记录

    原因查找: 因为linux下mysql默认是要区分表大小写的。...这样设置后,在mysql里创建的表带不带大写字母都没有影响,都可以正常读出和被引用。...这样设置后,表在硬盘上以小写保存,MySQL将所有表转换为小写存储和查找表上。该行为也适合数据库和表的别名。...3)登陆mysql数据库,"alter table 旧表 rename 新表" 将带大写字母的旧表改为小写表 4)最后再启动mysql即可!...下数据库、表、列名、别名大小写规则是这样的: 1)数据库与表是严格区分大小写的; 2)表的别名是严格区分大小写的; 3)列名与列的别名在所有的情况下均是忽略大小写的; 4)变量也是严格区分大小写

    6.6K70

    MySQL大小写敏感总结

    MySQL中,数据库、表、triggers实际上都对应了datadir目录(或子目录)下的文件,因此,这些对象的名字是否大小写敏感主要是依赖于操作系统和文件系统的,因此这些内容在Windows中是大小写是不敏感的...=1(Windows default):大小写不敏感,MySQL将数据全部转化为小写形式存储在磁盘上,而且在查询的时候也是全部转化为小写进行比较; lower_case_table_names =2(...5、数据敏感性:由Mysql的校对字符集规则来控制(Collation),默认大小写不敏感; 每一个字符型column都有一个“字符集属性(character set)”和一个“校对集属性(collation...------+ | 1 | a | | 2 | A | +------+------+可以在字段name前加个binary,使其区分大小写MySQL root...MYSQL轻松学

    3.6K40

    mysql大小写踩坑

    翻译过来大致 按大小写敏感存储表 按小写形式存储表 比较时不区分大小写大小写敏感存储表 以小写字母进行比较 他们的默认值在不同系统下面有区分 MacOS2 Unix0 Windows1 然后注意...mysql # 重启mysql,请确认路径 /etc/init.d/mysql restart 修改后可以用这三个sql查询是否生效 select @@lower_case_table_names;...中的表是按照大写表去查,而我们此处配置的,并不是查询时忽略表大小写,而是全部以小写表去查询 因此配置了lower_case_table_names = 1后,大写表用大写sql一律作废匹配不到...翻译过来就是说Linux或者其他类似Unix的系统,不支持设置为2[1],mysql服务端会强制使用0代替 那么这么多表,一个一个改不是很麻烦?...这里我们可以使用mysql数据库信息函数去按规则[2]查询出表转换为小写,再拼接成多条sql 或者使用存储过程、代码处理等方式 这里我使用以下sql: SELECT CONCAT( 'ALTER TABLE

    1.6K20

    MySQL中的大小写敏感

    今天同事问了一个问题,是关于MySQL大小写敏感的。 如果根据关键字case来搜索,会发现有两个参数。...大小写的敏感问题,在MySQL大体会分为两种类别,在Linux和Windows平台。...MySQL在Linux下数据库、表、列名、别名大小写规则是这样的:    1、数据库与表是严格区分大小写的;    2、表的别名是严格区分大小写的;    3、列名与列的别名在所有的情况下均是忽略大小写的...;    4、变量也是严格区分大小写的; 而Windows下的MySQL却是大小写不敏感的,所有表和数据库都会变成小写。...mysql> select id,name from TEST_TAB; ERROR 1146 (42S02): Table 'test.TEST_TAB' doesn't exist 而在列级别,MySQL

    2.6K60

    细说MySQL区分字母大小写

    在Linux系统上使用MySQLMySQL是区分字母大小写的,例如建A表时表是大写的A,修改A表时脚本里写的a,就会报错表a不存在。...在MySQL中,数据库对应数据目录中的目录,数据库中的每个表至少对应数据库目录中的一个文件或多个文件,所以,是否区分大小写是其所在的操作系统决定的。...在大多数基于Unix的系统中,MySQL是区分大小写的;而在Windows系统中,MySQL是不区分大小写的。...0表示使用指定的大小写字母在硬盘上保存表和数据库,并且区分字母大小写;1表示表在硬盘上以小写保存,MySQL将所有表转换为小写在存储和查找表上,不区分字母大小写;2表示表和数据库在硬盘上使用指定的大小写字母进行保存...,但MySQL将它们转换为小写在查找表上,不区分字母大小写

    2.6K50

    mysql大小写敏感与校对规则

    那么mysql大小写敏感是如何控制的;数据库,表,字段名这些字典对象以及字段值的大小敏感是如何控制的;以及校验规则与索引的关系,这是本文要讨论的内容。...mysql中控制数据库和表大小写敏感由参数lower_case_table_names控制,为0时表示区分大小写,为1时,表示将名字转化为小写后存储,不区分大小写。...在mysql中,数据库对应数据目录中的目录。数据库中的每个表至少对应数据库目录中的一个文件(也可能是多个,取决于存储引擎)。因此,所使用操作系统的大小写敏感性决定了数据库和表大小写敏感性。...1:表在硬盘上以小写保存,名称比较对大小写不敏感。MySQL将所有表转换为小写在存储和查找表上。该行为也适合数据库和表的别名。该值为Windows的默认值。...2:表和数据库在硬盘上使用CREATE TABLE或CREATE DATABASE语句指定的大小写字母进行保存,但MySQL将它们转换为小写在查找表上。

    5.1K10
    领券