在ubuntu下安裝的mysql版本是 5.6.25-0ubuntu1 mysql
linux下的mysql的表名是大小寫敏範的。而在在windows下安裝的mysql是大小寫不敏感的。linux
緣由是由於lower_case_table_names該屬性在linux下默認爲0,windows下默認爲1sql
0---大小寫敏感ubuntu
1---大小寫不敏感windows
因此經過修改mysql的my.cnf的配置,既能夠達到大小寫不敏感.app
linux下修改my.cnf(若是是ubuntu的版本,不存在/ect/my.cnf而是存在於,/ect/mysql/my.cnf)來修改該配置:this
在[mysqld]組中,添加以下語句:rest
[mysqld] lower_case_table_names = 1
而後重啓 service mysql restart便可。code
因爲以前本人建了一張EMP的表(在lower_case_table_names=0的時候):ci
CREATE TABLE EMP ( ENAME VARCHAR(10), HIREDATE DATE, SAL DECIMAL(10,2) );
是大寫的表名。在修改配置以後,大小寫不敏感了。
使用以下sql語句均報錯:
DESC emp; DESC EMP;
均報一樣的錯誤:
[Err] 1146 - Table 'test.emp' doesn't exist
按正常來講,若是DESC EMP;應該報:
[Err] 1146 - Table 'test.EMP' doesn't exist
纔對的,可是,二者倒是報一樣的錯誤。
而後查看文檔:
Value Meaning 0 Table and database names are stored on disk using the lettercase specified in the CREATE TABLE or CREATE DATABASE statement. Name comparisons are case sensitive. You should not set this variable to 0 if you are running MySQL on a system that has case-insensitive file names (such as Windows or Mac OS X). If you force this variable to 0 with --lower-case-table-names=0 on a case-insensitive file system and access MyISAM tablenames using different lettercases, index corruption may result. 1 Table names are stored in lowercase on disk and name comparisons are not case sensitive. MySQL converts all table names to lowercase on storage and lookup. This behavior also applies to database names and table aliases. 2 Table and database names are stored on disk using the lettercase specified in the CREATE TABLE or CREATE DATABASE statement, but MySQL converts them to lowercase on lookup. Name comparisons are not case sensitive. This works only on file systems that are not case sensitive! InnoDB table names are stored in lowercase, as forlower_case_table_names=1.
能夠看出
0是嚴格按找字母大小寫查找
2是經過把大寫轉換成小寫再進行查詢(前提是大小寫不敏感)。全部在已經存在大寫的表時,轉換成小寫時,就找不到原來表,表名是EMP,可是更改配置後,查詢表名的時候查找名稱爲emp的表,故而報[Err] 1146 - Table 'test.emp' doesn't exist,
經過把lower_case_table_names調節爲0,而後將表名改回小寫,而後,再調節回1.問題便可解決。