Data Type에 대한 이해 - String

Ryan·2025년 1월 15일

SQL/Python 분석

목록 보기
53/94

1. MySQL에서 대소문자(case sensitivity)에 대한 고민

1) Windows vs. Linux 환경 차이

  • Windows
    • 보통 파일 시스템 자체가 대소문자를 구분하지 않음 (case-insensitive).
    • 따라서 Windows 환경에서 MySQL도 디폴트 설정 시 테이블 명/컬럼 명의 대소문자를 엄격하게 구분하지 않습니다.
  • Linux
    • 파일 시스템이 대소문자를 구분 (case-sensitive).
    • 같은 MySQL이라도 Linux 환경에서는 테이블 명/컬럼 명을 대소문자 엄격히 구분하도록 설정되는 경우가 많습니다.

2) MySQL 설정값 확인

MySQL에서는 lower_case_table_names 라는 시스템 변수를 통해 테이블/컬럼명의 대소문자 구분 여부를 설정할 수 있습니다.

sql
코드 복사
SHOW VARIABLES LIKE 'lower%';
  • lower_case_file_system: ON이면 파일 시스템이 소문자만 인식(주로 Windows).
  • lower_case_table_names:
    • 0 → 구분 O (대문자 ≠ 소문자)
    • 1 → 구분 X (대문자 = 소문자)
    • (Linux에서는 0 또는 2로 설정 가능하지만, 일반적으로 0이 많이 사용됨)

예: lower_case_table_names = 1 이면 테이블 생성 시 대문자를 소문자로 변환해 저장하므로,

CREATE TABLE MyTableSELECT * FROM mytable동일하게 동작합니다.

주의

  • 운영환경(특히 Linux)에서 lower_case_table_names가 0으로 설정되어 있으면 테이블명이나 별칭(Alias) 사용 시 대소문자를 정확히 맞춰야 에러가 나지 않습니다.
  • 반대로 Windows 환경은 보통 1로 설정되어 “대소문자 구분이 없기” 때문에, 개발 환경과 배포 환경이 다르면 예기치 못한 에러가 발생할 수도 있습니다.

2. MySQL 자료형 복습 (정수형 vs. 실수형 vs. 문자형)

2-1. 정수형(INT 계열)

  • TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT
  • 필요한 범위메모리 사용량을 고려해 선택
  • UNSIGNED 옵션으로 음수를 제외하면 최대값 범위를 2배로 확장 가능

2-2. 실수형(FLOAT, DOUBLE, DECIMAL)

  • FLOAT, DOUBLE: 부동소수점. 연산속도 빠르고 큰 범위 표현 가능, 일부 오차 발생
  • DECIMAL: 고정소수점. 오차 없이 정밀 계산 가능, 주로 금융 분야에서 사용

2-3. 문자형(CHAR, VARCHAR)

  • CHAR(n): 고정 길이. 항상 n바이트를 차지, 길이가 일정한 코드/번호 등에 적합
  • VARCHAR(n): 가변 길이. 실제 문자열 길이에 추가 1~2바이트(길이 정보)가 소모, 일반 텍스트에 적합
  • 너무 긴 문자열(수천~수만 자)에는 TEXT 계열 고려

3. 테이블/컬럼 설계 시 대소문자 이슈 & 자료형 함께 고려하기

  1. 운영환경(OS)
    • 개발/운영 환경이 Windows와 Linux가 다르면, 테이블/컬럼명 케이스 차이로 인해 쿼리 에러가 날 수 있음
    • 미리 SHOW VARIABLES LIKE 'lower%';로 설정 확인 후, 프로젝트에 맞춰 통일하는 것이 좋음
  2. 자료형
    • 정수 범위 초과 여부, 소수점 정밀도, 문자열 길이 확정 여부 등을 파악
    • 예) “이름” 칼럼은 VARCHAR(50), “우편번호”는 CHAR(5) 등으로 구분
    • 금액이나 환율 같은 민감한 숫자는 DECIMAL(10,2) 등 고정소수점 사용을 권장
  3. 인덱스 및 성능
    • 대소문자 구분은 인덱싱에도 영향을 줄 수 있음(특히 Linux 환경)
    • 불필요하게 큰 문자형을 지정하면 인덱스 사이즈 커짐 -> 성능 저하
    • 실제 데이터 범위를 정확히 파악하고 최적화

4. 정리

  • 대소문자 구분: Windows(기본 구분 없음), Linux(구분 있음) 차이를 명심.
    • MySQL의 lower_case_table_names 값에 따라 다름(0: 구분, 1: 비구분).
    • 환경이 다른 서버끼리 DB/쿼리를 공유할 땐 더욱 주의.
  • 자료형 선정:
    • 정수형/실수형/문자형 고를 때, 데이터 범위정밀도, 공간 사용량, 인덱싱을 종합적으로 고려.
    • “정말 항상 고정 길이인지, 오차 허용 범위는 어느 정도인지” 등 사전 검토 필수.

TIP: 실제 운영 환경에서 개발 서버(Windows)와 배포 서버(Linux)가 달라서 생기는 케이스 이슈가 매우 흔합니다.

기획 단계에서부터 테이블명은 소문자 통일 등을 권장하며, 설정값도 미리 맞춰두면 혼선을 줄일 수 있습니다.

이처럼 DB 대소문자 구분 문제자료형 선택은 모두 운영 환경에 직접적인 영향을 주는 중요한 요소입니다.

프로젝트 초기에 꼼꼼히 체크하고, 일관된 컨벤션(테이블명·컬럼명 소문자 통일 등)을 지키면 유지보수가 훨씬 수월해집니다.

0개의 댓글