CentOS下无法正常获取MySQL数据库表数据的问题
之前,由于客户要求在centOS下安装系统应用,因此有机会接触了一下CentOS,顺便也了解了下CentOS的常规操作,还有在CentOS下的MySQL相关操作。
目前技术框架使用JSF(richfaces、facelets)+Spring+JPA(OpenJPA),不使用数据库依赖的触发器或存储过程,所有业务逻辑在web服务器上执行,因此数据库基本不用考虑移植问题。但是本来在windows下运行正常的系统,在linux下却没法获取一些表的内容。由于数据库的初始化,最初只是体现在几个需要手工维护的表数据上,最终却发现原来是因为数据库表名大小写的问题!
具体操作过程:
在windows下,使用MySQL的客户端工具“Navicat”,将当前的数据库导出到test.sql文件中。说明:导出的.sql文件中,所有的表名都是小写。
将导出的.sql文件拷贝至linux下,导入需要使用的数据库中
启动web服务器,访问服务。问题出现:许多表无法访问。
在mysql中使用“show
tables;”命令,发现表名有重复,重复的表名区别在于大小写,大写的表名与对应的实体bean名相同。找到问题:表名大小写造成的数据无法访问。(linux 下的 MySQL 安装完后,默认区分表名的大小写,不区分列名的大小写;Windows下默认不区分大小写 )
上述问题有两种解决方案:
在JPA的实体bean的声明中,使用“Table”的“name”属性,指定表名,表名尽量全部使用小写,不同单词之间使用下划线连接(例如:@Table(name="sys_user")
)
使用Linux下MySQL的相关参数,使MySQL不区分大小写(
lower_case_table_names=1
)
上述两种方法,第一种是较为通用的解决方案,但是需要开发人员更改全部的实体bean,然后重新编译;第二种方案适合于系统已经进入生产环境的状况,并且对如何修改linux下的MySQL配置需要一定的专业知识及经验,对实施人员技术要求较高。
关于如何修改CentOS下的MySQL不区分大小写的具体操作方法:
用 root 帐号登录后,在 /etc/my.cnf 中的 [mysqld] 后添加添加 lower_case_table_names=1 ,重启Mysqld 服务。服务重新启动之后,已设置成功:不区分表名的大小写
关于lower_case_table_names 参数详解: lower_case_table_names参数有两个值:[0、1 ]其中 0 :区分大小写, 1 :不区分大小写
补充说明:
关于持久层,使用Spring自动生成的DDL来创建对应的持久层数据库表及索引等数据,简化实施工作的复杂度
相关文档:
不同数据库之间的语法差异还真不少~要崩溃了。
1.创建带自增列临时表:create TEMPORARY table t(id int AUTO_INCREMENT PRIMARY key, u_name varchar(50));--为什么必须要主键?!
向这个临时表中插入数据:insert into t values(null, 'zdy');--为什么一定要加null?!
2.把一张表的查询结果插入临时表:insert into t ......
一、MySQL 获得当前日期时间 函数
select now();
+---------------------+
| now() |
+---------------------+
| 2008-08-08 22:20:46 |
+---------------------+
除了 now() 函数能获得当前的日期时间外,MySQL 中还有下面的 ......
1、看机器配置,指三大件:cpu、内存、硬盘
2、看mysql配置参数
3、查系mysql行状态,可以用mysqlreport工具来查看
4、查看mysql的慢查询
依次解决了以上问题之后,再来查找程序方面的问题
my.cnf缓存优化
在 my.cnf 中添加/修改以下选项:
#取消文件系统的外部锁
skip-locking
#不进行域名反解析,注意 ......
一、什么是索引?
索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存。如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录。表里面的记录数量越多,这个操作的代价就越高。如果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录即可迅速得 ......
搞定MySQL数据库中文模糊检索问题
作者: bianceng, 出处:IT专家网论坛, 责任编辑: 陈子琪,
2009-10-28 07:00
在 MySQL下,在进行中文模糊检索时,经常会返回一些与之不相关的记录,如查找 "%a%" 时,返回的可能有中文字符,却没有a字符存在。
在 MySQL下,在进行中文模糊检索时,经常会返回一些与 ......