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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:
+关注继续查看
之前,由于客户要求在centOS下安装系统应用,因此有机会接触了一下CentOS,顺便也了解了下CentOS的常规操作,还有在CentOS下的MySQL相关操作。

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

  具体操作过程:

  1、在windows下,使用MySQL的客户端工具“Navicat”,将当前的数据库导出到test.sql文件中。说明:导出的.sql文件中,所有的表名都是小写。

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

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

   4、在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来创建对应的持久层数据库表及索引等数据,简化实施工作的复杂度








====================================分割线================================



最新内容请见作者的GitHub页:http://qaseven.github.io/

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
15天前
|
关系型数据库 MySQL
MYSQL 不允许在子查询的同时删除原表数据的解决方法 specify target table
MYSQL 不允许在子查询的同时删除原表数据的解决方法 specify target table
16 0
|
21天前
|
存储 关系型数据库 MySQL
数据库数据恢复—MySQL数据库误删除表数据的数据恢复案例
数据库数据恢复环境: 一台本地windows sever操作系统服务器,服务器上部署mysql数据库单实例,引擎类型为innodb,表内数据存储所使用表空间类型为独立表空间。无数据库备份,未开启binlog。 数据库故障&分析: 工作人员在执行Delete命令删除数据时未添加where子句进行筛选,导致全表数据被删除,删除后未对该表进行其他操作。
数据库数据恢复—MySQL数据库误删除表数据的数据恢复案例
|
2月前
|
存储 关系型数据库 MySQL
MySQL 中单表数据的最大行数应该控制在多少?
MySQL 中单表数据的最大行数应该控制在多少?
247 1
MySQL 中单表数据的最大行数应该控制在多少?
|
3月前
|
SQL
MySQL---表数据高效率查询(简述)
MySQL---表数据高效率查询(简述)
32 0
|
5月前
|
关系型数据库 MySQL 索引
Mysql复制表结构与表数据
Mysql复制表结构与表数据
80 0
|
6月前
|
SQL 关系型数据库 MySQL
MySQL 删除表中的数据记录
前言 删除数据记录是数据操作中常见的操作,可以删除表中已经存在的数据记录。在MySQL中可以通过DELETE语句来删除数据记录,该SQL语句可以通过以下几种方式使用:删除特定数据记录、删除所有数据记录。
|
7月前
|
存储 SQL JavaScript
阿里一面:MySQL 单表数据最大不要超过多少行?为什么?
阿里一面:MySQL 单表数据最大不要超过多少行?为什么?
|
7月前
|
存储 SQL 关系型数据库
阿里一面:MySQL 单表数据最大不要超过多少行?为什么?这样回答满分!
阿里一面:MySQL 单表数据最大不要超过多少行?为什么?这样回答满分!
|
7月前
|
SQL 关系型数据库 MySQL
MySQL-在线处理大表数据 & 在线修改大表的表结构
MySQL-在线处理大表数据 & 在线修改大表的表结构
99 0
|
7月前
|
SQL 存储 安全
【MySQL】表数据的增删查改(DML)
创建一张Student表,用来存储学生的身份信息:
推荐文章
更多