[MYSQL, MARIADB] 대문자 테이블 업데이트 시 doesn't exist 오류 메세지 해결
Table '테이블명' doesn't exist 오류 해결하기
데이터베이스에서 테이블을 생성 후 SELECT * FROM TEST; 쿼리문을 실행했을 때 Table 'TEST' doesn't exist 오류 메세지를 볼 때가 있습니다.
윈도우에서는 보통 자동으로 대소문자를 구분 해주지만 리눅스 환경(CentOS, Ubuntu 등등) 에서는 대소문자 구분이 되지 않을 경우 데이터베이스에서 별도로 설정을 추가해주어야 합니다.
리눅스환경, Mysql 에서 테이블을 생성하고 대소문자 설정을 해보도록 하겠습니다.
[root@localhost local]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.1.73 Source distribution
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> use test
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> create table test_table (
-> idx int,
-> title varchar(50)
-> );
Query OK, 0 rows affected (0.02 sec)
mysql>
테이블 생성이 완료 되었다면 테이블명을 대문자로 지정하여 SELECT 해보겠습니다.
mysql> SELECT * FROM TEST_TABLE;
ERROR 1146 (42S02): Table 'test.TEST_TABLE' doesn't exist
mysql>
Table 'test.TEST_TABLE' doesn't exist 테이블을 찾을 수 없다고 에러메세지가 출력 됩니다.
이런 경우, 대소문자 구분에 대한 설정값을 변경하여 처리가 가능합니다.
mysql> show variables like 'lower_case_table_names';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| lower_case_table_names | 0 |
+------------------------+-------+
1 row in set (0.00 sec)
mysql>
lower_case_table_names 의 Value 값이 0일 경우 : 대소문자를 구분하며
lower_case_table_names 의 Value 값이 1일 경우 : 대소문자를 하지 않습니다.
현재의 값이 0 이므로 대소문자를 구분하여 대문자로 테이블 SELECT 시 테이블을 찾을 수 없다고 에러메세지가 출력 되었습니다.
대소문자를 구분하지 않도록 설정을 변경해 보겠습니다.
리눅스에서 Mysql utf-8 인코딩 설정할 때 수정한 my.cnf 설정파일을 이용하여 대소문자 구분 설정을 변경 가능합니다.
[root@localhost local]# vi /etc/my.cnf
my.cnf 파일 안에서 [mysqld] 하단에 lower_case_table_names=1 을 추가합니다.
추가가 완료 되었다면 mysql 데몬을 재시작 하여 대문자로 테이블을 조회해봅니다.
[root@localhost local]# service mysqld restart
mysqld 를 정지 중: [ OK ]
mysqld (을)를 시작 중: [ OK ]
[root@localhost local]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.1.73 Source distribution
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> use test
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> SELECT * FROM TEST_TABLE;
Empty set (0.00 sec)
mysql>
테이블명을 대문자로 실행하여 정상적으로 조회가 되었습니다.