Linux下Mysql的表名大小写敏感引起数据库操作失败

今天处理了一个奇怪的问题,现象如下:

1、  Linux下安装了Mysql,导入数据库表,一切正常;

2、  Spring+Myibatis连接数据库正常;

3、  当执行数据库查询的时候,抛出如下异常:


org.springframework.jdbc.BadSqlGrammarException:

### Error querying database.  Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table ‘gonggao.BC_NOTICE_ATTACHMENT‘ doesn‘t exist

### The error may involve defaultParameterMap

### The error occurred while setting parameters

### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table ‘gonggao.BC_NOTICE_ATTACHMENT‘ doesn‘t exist

; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table ‘gonggao.BC_NOTICE_ATTACHMENT‘ doesn‘t exist

at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:233)

at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)

at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:71)

at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:346)

at com.sun.proxy.$Proxy7.selectList(Unknown Source)

……

按照提示,意思是表不存在,可是查数据库,表是存在的:

mysql> show tables;

bc_notice_attachment

……

这个问题就奇怪了,大家都不知道问题出在哪里。

后来我用命令连上mysql,输入:

mysql>Insert into BC_NOTICE_ATTACHMENT(notice_id,name,url) values(-1,’test’,’test’);

ERROR 1146 (42S02): Table ‘gonggao. BC_NOTICE_ATTACHMENT’ doesn’nt exit

换成:

mysql>Insert into bc_notice_attachment(notice_id,name,url) values(-1,’test’,’test’);

Query OK, 1 row affected (0.01 sec)

说明是表名大小写敏感引起的异常,问题从网上搜一下就很好解决了。

时间: 2024-10-11 07:16:57

Linux下Mysql的表名大小写敏感引起数据库操作失败的相关文章

Linux下MySQL默认对表名区分大小写

有个项目部署到服务器上,日志里老是提示找不到表. 原来Linux下MySQL默认对表名区分大小写. 解决方法: 一.规范代码,表名全部大写 二.修改MySQL配置,使表名全部自动转为小写. 1.用ROOT登录,修改/etc/my.cnf 2.在[mysqld]下加入一行:lower_case_table_names=1 3.重新启动数据库                                              解释 0 使用CREATE TABLE或CREATE DATABAS

linux 下 设置 MySQL8 表名大小写不敏感方法,解决设置后无法启动 MySQL 服务的问题

在安装完成之后,初始化数据库之前,修改 my.cnf 打开mysql配置文件 vim /etc/my.cnf 在尾部追加一行 lower_case_table_names=1 并保存,然后再初始化数据库. 重启mysql, systemctl restart mysqld.service 如果这个操作是初始化数据库之后,也就是安装后运行过服务,那就可能会出错. 错误类似于Job for mysqld.service failed because the control process exite

Linux下mysql多表数据拆分单表

需求 写代码以前都复制粘贴,菜的一比,第一次碰见一个生活中的实际需求,哎,数据结构和流,线程还是得认真学啊 表结构如下 #!/bin/bash# ** 存储过程名称: ysp.ddl# ** 功能描述: # ** 创建者: wx# ** 创建日期: # ** 修改者: # ** 创建日期: # ** 修改内容: drop table if exists ods_payment_flow_sf7;create table ods_payment_flow_sf7(paymentid        

Linux中MySQL忽略表中字段大小写

linux 下,mysql 的表面默认是区分大小写的,windows 下默认不区分大小写,我们大多数在windows 下开发,之后迁移到linux(特别是带有Hibernate的工程),可以修改配置是linux下,myql 表名不区分大小写 MySQL在Linux下数据库名.表名.列名.别名大小写规则是这样的:     1.数据库名与表名是严格区分大小写的:     2.表的别名是严格区分大小写的:     3.列名与列的别名在所有的情况下均是忽略大小写的:     4.变量名也是严格区分大小写

linux下mysql表名大小写敏感的问题

执行sql: show global variables like '%lower_case%'; lower_case_file_system:表示当前系统文件是否大小写敏感,只读参数,无法修改ON 大小写不敏感 OFF 大小写敏感 lower_case_table_names:这个选项不仅仅适用于表名的大小写敏感,同样适用于数据库名和表别名.该变量取值范围有三个,分别是0.1.2. 设置成0:表名按你写的SQL大小写存储,大写就大写小写就小写,比较时大小写敏感. 设置成1:表名转小写后存储到

【mark】centos下,更改mysql数据库表名大小写敏感

Linux下mysql安装完后是默认:区分表名的大小写,不区分列名的大小写:root登录,修改/etc/my.cnf,在末尾添加一行:lower_case_table_names=1lower_case_table_names参数: 0为敏感,1为不敏感. MySQL在Linux下数据库名.表名.列名.别名大小写规则是这样的:1.数据库名与表名是严格区分大小写的:2.表的别名是严格区分大小写的:3.列名与列的别名在所有的情况下均是忽略大小写的:4.变量名也是严格区分大小写的: *如果之前已经创建

linux下mysql表名大小写问题

近日,新mysql实例导入sql数据时,发现比老的mysql多了100+张表,最终发现是mysql表名大小写所致:很简单的问题却耽误很长时间,在此记录一下,以防再犯同样的错误: 1.Linux下mysql安装完后是默认:区分表名的大小写,不区分列名的大小写:2.用root帐号登录后,在/etc/my.cnf中的[mysqld]后添加添加lower_case_table_names=1,重启MYSQL服务,这时已设置成功:不区分表名的大小写:lower_case_table_names参数详解:l

设置Linux下Mysql表名不区分大小写

1.Linux下mysql安装完后是默认:区分表名的大小写,不区分列名的大小写:2.用root帐号登录后,在/etc/my.cnf中的[mysqld]后添加添加lower_case_table_names=1,重启MYSQL服务,这时已设置成功:不区分表名的大小写:lower_case_table_names参数详解:lower_case_table_names=0其中0:区分大小写,1:不区分大小写 MySQL在Linux下数据库名.表名.列名.别名大小写规则是这样的:1.数据库名与表名是严格

MySQL表名大小写敏感导致的问题

最近在项目中遇到一个比较奇怪的小问题.在开发过程中自己测试没有问题,但是提测后,测试的同时在测试一个功能时报错了,日志是: Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'testdb.Emp' doesn't exist 1 于是乎打开数据库客户端,发现testdb数据库有这张表,真是奇怪.项目本地测试还是没问题,纠结了半天,才留意到代码中表名是Emp,而数据库中是emp.原来是表名大小写