MySQL表名忽略大小写问题记录

时间:2017-06-15 17:48

MySQL表名忽略大小写问题记录

问题描述:

一开发同事在linux下调一个程序老是报错说找不到表,但是登陆mysql,show tables查看明明是已经创建了这张表的!!如下:

mysql> show tables; 

 

+-------------------------------------------+ 

 

| Tables_in_huan_db                         | 

 

+-------------------------------------------+ 

 

| advertisement                             | 

 

| message_queue                             | 

 

| message_sys_user                          | 

 

| message_user                              | 

 

| opHistory                                 | 

 

| opHistory_queue                           | 

 

| opHistory_queue_result_log                | 

 

| opHistory_queue_send_fail_log             | 

 

+-------------------------------------------+ 

 

rows in set (0.00 sec) 

 

mysql> desc opHistory; 

 

ERROR 1146 (42S02): Table 'haun_db.opHistory' doesn't exist 

 

mysql> desc opHistory_queue; 

 

ERROR 1146 (42S02): Table 'haun_db.opHistory_queue' doesn't exist 

 

mysql> desc opHistory_queue_result_log; 

 

ERROR 1146 (42S02): Table 'haun_db.opHistory' doesn't exist 

 

mysql> desc opHistory_queue_send_fail_log; 

 

ERROR 1146 (42S02): Table 'haun_db.opHistory_queue_send_fail_log' doesn't exist 

这张表明明存在,为什么程序就找不到表呢??

原因查找:

因为linux下mysql默认是要区分表名大小写的。mysql是否区分大小写设置是由参数lower_case_table_names决定的,其中:

1)lower_case_table_names = 0

区分大小写(即对大小写不敏感),默认是这种设置。这样设置后,在mysql里创建的表名带不带大写字母都没有影响,都可以正常读出和被引用。

mysql> show variables like "%case%"

 

+------------------------+-------+ 

 

| Variable_name          | Value | 

 

+------------------------+-------+ 

 

| lower_case_file_system | ON    | 

 

| lower_case_table_names | 0     | 

 

+------------------------+-------+ 

 

rows in set (0.00 sec) 

2)lower_case_table_names = 1

  • A+
所属分类:MySQL