我们通常在Windows系统开发程序并进行功能测试,假如上线的时侯选择Windows服务器的话,是哪些问题都没有。并且当选择Linux系统的时侯,就必须注意Linux系统是严格的区别文字大小。
从Windows迁移到Linux,忽然难以读取数据?
有个在Windows运行稳定的系统,随着Windows2003的技术支持结束,决定迁移到Linux系统。
此次迁移到Linux系统的缘由有2个,一个是Windows2008开始最低配置也须要2核2GB,另外一个是公司里来个一个Linux大侠。
系统迁移的通常流程如下。
新购一台服务器(推荐使用按时付费的云主机,订购化学机会降低固定资产)在新购的服务器,搭建环境(Apache,PHP,MySQL,FTP…)把现行服务器的数据库数据,导出到新服务器把程序上传到新服务器在新服务器进行功能测试假如功能没有问题的话,再度把现行服务器的数据迁移到新服务器域名解析linux空间,就基本大功告成了
在第5个步骤发觉难以读取一部份数据。
为何在Windows能正常运行的程序和数据库linux系统大小,在Linux都会出现问题呢。这时通常会怀疑系统环境的问题,由于程序和数据库是一样的。
但是也许是英语字母大小写造成的结果。
例如在首页调阅数据库数据的SQL文如下。
SELECTuser_name,idfromUser;
User表在Windows系统上的Table名为user,由于不区别英语字母大小写所以没问题。
而在Linux会怎样样呢?
迁移过来的Table名是user,而在SQL文里指定的是User表。别忘了这家伙(Linux)区别英语字母大小写,因而会提示该表(User表)不存在。
解决方式
大约有3种解决方式,第一个是更改数据库的Table名,第二个是更改程序,第三个是更改MySQL的参数。
第一和第二中标麒麟linux,就无需多做说明了linux系统大小,而第三种方式是借助MySQL参数lower_case_table_names。
lower_case_table_names
参数lower_case_table_names是,在MySQL里如何区别Table英语字母大小的,默认是0。
这样一来就简单了,可以让MySQL不区别Table名的大小写。在/etc/f(yum安装时的默认路径)文件的[mysqld]下边添加lower_case_table_names=1就可以了。
[mysqld]
...
lower_case_table_names=1
...
更改MySQL参数以后,重启一下数据库。