云计算、AI、云原生、大数据等一站式技术学习平台

网站首页 > 教程文章 正文

Linux系统区别英文字母大小写(linux系统不区分大小写)

jxf315 2025-03-14 18:11:24 教程文章 18 ℃

我们一般在Windows系统开发程序并进行功能测试,如果上线的时候选择Windows服务器的话,是什么问题都没有。但是当选择Linux系统的时候,就必须注意Linux系统是严格的区别文字大小。

  • Windows系统:不区别英文字母的大小写(Windows文件系统不支持大小写应该是更正确的说法)
  • Linux系统:区别英文字母的大小写

从Windows迁移到Linux,突然无法读取数据?

有个在Windows运行稳定的系统,随着Windows2003的技术支持结束,决定迁移到Linux系统。

  • 系统:Windows2003(32位)
  • Web:Apache
  • 程序:PHP
  • 数据库:MySQL

这次迁移到Linux系统的原因有2个,一个是Windows2008开始最低配置也需要2核2GB,另外一个是公司里来个一个Linux高手

系统迁移的一般流程如下。

  1. 新购一台服务器(推荐使用按量付费的云主机,购买物理机会增加固定资产)
  2. 在新购的服务器,搭建环境(Apache,PHP,MySQL,FTP…)
  3. 把现行服务器的数据库数据,导入到新服务器
  4. 把程序上传到新服务器
  5. 在新服务器进行功能测试
  6. 如果功能没有问题的话,再次把现行服务器的数据迁移到新服务器
  7. 域名解析,就基本大功告成了

在第5个步骤发现无法读取一部分数据

为什么在Windows能正常运行的程序和数据库,在Linux就会出现问题呢。这时一般会怀疑系统环境的问题,因为程序和数据库是一样的。

然而其实是英文字母大小写导致的结果。

比如在首页调取数据库数据的SQL文如下。

SELECT user_name,id from User;

User表在Windows系统上的Table名为user,因为不区别英文字母大小写所以没问题。

而在Linux会怎么样呢?

迁移过来的Table名是user,而在SQL文里指定的是User表。别忘了这家伙(Linux)区别英文字母大小写,因此会提示该表(User表)不存在。

解决方法

大概有3种解决方法,第一个是修改数据库的Table名,第二个是修改程序,第三个是修改MySQL的参数。

第一和第二,就无需多做说明了,而第三种方法是利用MySQL参数lower_case_table_names。

lower_case_table_names

参数lower_case_table_names是,在MySQL里怎么区别Table英文字母大小的,默认是0。

  • 0:区别大小写
  • 1:不区别大小写(Table名以小写保存)
  • 2:不区别大小写(Table名以原来的大小写保存)

这样一来就简单了,可以让MySQL不区别Table名的大小写。在/etc/my.cnf(yum安装时的默认路径)文件的[mysqld]下面添加lower_case_table_names = 1就可以了。

[mysqld]

...

lower_case_table_names = 1

...

修改MySQL参数之后,重启一下数据库。

Tags:

最近发表
标签列表