Mysql数据库里明明有表,但是boot报错找不到表?

1、使用项目脚手架过程中发现,明明数据库里有表,但是报错找不到表呢。

这是因为MySql在不同的操作系统下,他的大小写敏感也是不一样的。

Windos下:

Mysql数据库里明明有表,但是boot报错找不到表?

Linux下:

Mysql数据库里明明有表,但是boot报错找不到表?
可以看出,lower_case_file_systemlower_case_table_names 参数的值不同。

lower_case_file_system

此变量描述数据目录所在的文件系统上文件名的区分大小写。 
OFF表示文件名区分大小写,ON表示它们不区分大小写。
此变量是只读的,因为它反映了文件系统属性并设置它对文件系统没有影响。

lower_case_table_names

该参数为静态,可设置为0、1、2。

0 --大小写敏感。(Unix,Linux默认) 创建的库表将原样保存在磁盘上。如create database TeSt;将会创建一个TeSt的目录,create table AbCCC …将会原样生成AbCCC.frm。 SQL语句也会原样解析。

1 --大小写不敏感。(Windows默认) 创建的库表时,MySQL将所有的库表名转换成小写存储在磁盘上。 SQL语句同样会将库表名转换成小写。 如需要查询以前创建的Testtable(生成Testtable.frm文件),即便执行select * from Testtable,也会被转换成select * from testtable,致使报错表不存在。

2 --大小写不敏感(OS X默认) 创建的库表将原样保存在磁盘上。 但SQL语句将库表名转换成小写。

On Windows the default value is 1. On macOS, the default value is 2. On Linux, a value of 2 is not supported; the server forces the value to 0 instead.

在Windows上,默认值为1。在macOS上,默认值为2。在Linux上不支持值2;服务器强制该值为0。

知道原因后,这个坑就很容易解决了

只需要让: lower_case_table_names = 1,mysql会先把表名转为小写,再执行操作。

Linux命令: vim /etc/my.cnf
i 进入编辑模式,在 [mysqld] 下加上 lower_case_table_names=1,按 ESC ==> :wq 回车即可

最后不要忘了重启Mysql服务

service mysqld restart;
上一篇:(Python程序设计(第3版)第二章列表预习总结)


下一篇:随机森林分类给出每一个类别的概率