CentOS下无法正常获取MySQL数据库表数据的问题

上一篇 / 下一篇  2012-09-07 13:24:39 / 个人分类:数据库

HW$X3t3H4z*_0  之前,由于客户要求在centOS下安装系统应用,因此有机会接触了一下CentOS,顺便也了解了下CentOS的常规操作,还有在CentOS下的MySQL相关操作。

z!IK| xl051Testing软件测试网7?i3wl!j

  目前技术框架使用JSF(richfaces、facelets)+Spring+JPA(OpenJPA),不使用数据库依赖的触发器或存储过程,所有业务逻辑在web服务器上执行,因此数据库基本不用考虑移植问题。但是本来在windows下运行正常的系统,在linux下却没法获取一些表的内容。由于数据库的初始化,最初只是体现在几个需要手工维护的表数据上,最终却发现原来是因为数据库表名大小写的问题!51Testing软件测试网.B![SgW#tLl

51Testing软件测试网h2f]!D x;U2Up5hc

  具体操作过程:

'^6V:Z9@'^u-Pu!W `051Testing软件测试网2F_y%}\}x

  1、在windows下,使用MySQL的客户端工具“Navicat”,将当前的数据库导出到test.sql文件中。说明:导出的.sql文件中,所有的表名都是小写。51Testing软件测试网a$k;} fh.b(F3Dqg

51Testing软件测试网k,{DAs2QV

  2、将导出的.sql文件拷贝至linux下,导入需要使用的数据库中

W!sonGC~051Testing软件测试网o*p0|4m4c Snq

  3、启动web服务器,访问服务。问题出现:许多表无法访问。

!?I:JB2B,v051Testing软件测试网U B+Ol(v VS

   4、在mysql中使用“show tables;”命令,发现表名有重复,重复的表名区别在于大小写,大写的表名与对应的实体bean名相同。找到问题:表名大小写造成的数据无法访问。 (linux 下的 MySQL 安装完后,默认区分表名的大小写,不区分列名的大小写;Windows下默认不区分大小写 )

({#I*r+v2Ryv/kh0

Zd9tkJi C p t@j0  上述问题有两种解决方案:

Y1a,Io"|\BH051Testing软件测试网m/~p8E rg0H

  ● 在JPA的实体bean的声明中,使用“Table”的“name”属性,指定表名,表名尽量全部使用小写,不同单词之间使用下划线连接

^,o1]GL?-|'xh)C)k051Testing软件测试网 oF8Js!h4Rr

  例如:

e.}Of&ds%nP0
@Table(name="sys_user")

1pD F#Mxl0  ● 使用Linux下MySQL的相关参数,使MySQL不区分大小写( lower_case_table_names=1 )51Testing软件测试网2O:u(W(X;jS(gp

v.p |&}2xBG2Rby0  上述两种方法,第一种是较为通用的解决方案,但是需要开发人员更改全部的实体bean,然后重新编译;第二种方案适合于系统已经进入生产环境的状况,并且对如何修改linux下的MySQL配置需要一定的专业知识及经验,对实施人员技术要求较高。51Testing软件测试网A R\8`m

ToO9Aa0  关于如何修改CentOS下的MySQL不区分大小写的具体操作方法:

q1^3LK"rs#T&N051Testing软件测试网"e}kycD p A

  用 root 帐号登录后,在 /etc/my.cnf 中的 [mysqld] 后添加添加 lower_case_table_names=1 ,重启Mysqld 服务。服务重新启动之后,已设置成功:不区分表名的大小写

l#E+jv%V0

$^ P!H5k#O7R0  关于lower_case_table_names 参数详解: lower_case_table_names参数有两个值:[0、1 ]其中0 :区分大小写,1 :不区分大小写51Testing软件测试网"f&mk{^#QT&VD

51Testing软件测试网1h ]w ]*gq r

  补充说明:51Testing软件测试网3Rljuo N

51Testing软件测试网iFwK0C;M]tr(K5R

  关于持久层,使用Spring自动生成的DDL来创建对应的持久层数据库表及索引等数据,简化实施工作的复杂度

6Gi&Q"p }I0

TAG:

 

评分:0

我来说两句

Open Toolbar