[MYSQL, MARIADB] 대문자 테이블 업데이트 시 doesn't exist 오류 메세지 해결


Table '테이블명' doesn't exist 오류 해결하기

데이터베이스에서 테이블을 생성 후 SELECT * FROM TEST; 쿼리문을 실행했을 때 Table 'TEST' doesn't exist 오류 메세지를 볼 때가 있습니다.

윈도우에서는 보통 자동으로 대소문자를 구분 해주지만 리눅스 환경(CentOS, Ubuntu 등등) 에서는 대소문자 구분이 되지 않을 경우 데이터베이스에서 별도로 설정을 추가해주어야 합니다.


리눅스환경, Mysql 에서 테이블을 생성하고 대소문자 설정을 해보도록 하겠습니다.

  1. [root@localhost local]# mysql -uroot -p
  2. Enter password:
  3. Welcome to the MySQL monitor. Commands end with ; or \g.
  4. Your MySQL connection id is 4
  5. Server version: 5.1.73 Source distribution
  6. Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
  7. Oracle is a registered trademark of Oracle Corporation and/or its
  8. affiliates. Other names may be trademarks of their respective
  9. owners.
  10. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  11. mysql> use test
  12. Reading table information for completion of table and column names
  13. You can turn off this feature to get a quicker startup with -A
  14. Database changed
  15. mysql> create table test_table (
  16. -> idx int,
  17. -> title varchar(50)
  18. -> );
  19. Query OK, 0 rows affected (0.02 sec)
  20. mysql>


테이블 생성이 완료 되었다면 테이블명을 대문자로 지정하여 SELECT 해보겠습니다.

  1. mysql> SELECT * FROM TEST_TABLE;
  2. ERROR 1146 (42S02): Table 'test.TEST_TABLE' doesn't exist
  3. mysql>

Table 'test.TEST_TABLE' doesn't exist 테이블을 찾을 수 없다고 에러메세지가 출력 됩니다.

이런 경우, 대소문자 구분에 대한 설정값을 변경하여 처리가 가능합니다.


  1. mysql> show variables like 'lower_case_table_names';
  2. +------------------------+-------+
  3. | Variable_name | Value |
  4. +------------------------+-------+
  5. | lower_case_table_names | 0 |
  6. +------------------------+-------+
  7. 1 row in set (0.00 sec)
  8. mysql>

lower_case_table_names 의 Value 값이 0일 경우 : 대소문자를 구분하며

lower_case_table_names 의 Value 값이 1일 경우 : 대소문자를 하지 않습니다.


현재의 값이 0 이므로 대소문자를 구분하여 대문자로 테이블 SELECT 시 테이블을 찾을 수 없다고 에러메세지가 출력 되었습니다.

대소문자를 구분하지 않도록 설정을 변경해 보겠습니다.


리눅스에서 Mysql utf-8 인코딩 설정할 때 수정한 my.cnf 설정파일을 이용하여 대소문자 구분 설정을 변경 가능합니다.

  1. [root@localhost local]# vi /etc/my.cnf


my.cnf 파일 안에서 [mysqld] 하단에 lower_case_table_names=1 을 추가합니다.


추가가 완료 되었다면 mysql 데몬을 재시작 하여 대문자로 테이블을 조회해봅니다.


  1. [root@localhost local]# service mysqld restart
  2. mysqld 정지 중: [ OK ]
  3. mysqld (을)를 시작 중: [ OK ]
  4. [root@localhost local]# mysql -uroot -p
  5. Enter password:
  6. Welcome to the MySQL monitor. Commands end with ; or \g.
  7. Your MySQL connection id is 2
  8. Server version: 5.1.73 Source distribution
  9. Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
  10. Oracle is a registered trademark of Oracle Corporation and/or its
  11. affiliates. Other names may be trademarks of their respective
  12. owners.
  13. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  14. mysql> use test
  15. Reading table information for completion of table and column names
  16. You can turn off this feature to get a quicker startup with -A
  17. Database changed
  18. mysql> SELECT * FROM TEST_TABLE;
  19. Empty set (0.00 sec)
  20. mysql>


테이블명을 대문자로 실행하여 정상적으로 조회가 되었습니다.

* 파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음
작성자 소개
초이 프로필
WrapUp 블로거

초이

반려견을 좋아하고, 차를 좋아하고, 여행을 좋아하고, 맛집을 찾아 즐기는 웹 개발자 입니다^^