레이블이 MySQL인 게시물을 표시합니다. 모든 게시물 표시
레이블이 MySQL인 게시물을 표시합니다. 모든 게시물 표시

2015년 1월 3일 토요일

MySQL CHAR VARCHAR


  CHAR 데이터 타입
CHAR와 VARCHAR(VARiable length CHARacter string)은 모두 텍스트 문자열을 허용하고, 필드의 크기를 제한한다. 두 타입의 차이점은 CHAR 필드의 모든 문자열은 크기가 정해진다는 것. 즉 더 작은 문자열을 입력하면 공백으로 채워진다. 반면 VARCHAR의 경우, 텍스트를 채우지 않으며, 입력한 텍스트 크기에 맞게 가변적으로 크기를 가진다. 그러나, VARCHAR는 각 값의 크기를 추적할 수 있는 약간의 오버헤드가 필요하기 때문에 모든 데이터의 크기가 비슷하다면, CHAR가 더 효율적이다.

TYPE  
사용되는 바이트 
예제 
CHAR(n) 
정확히 n (<=255) 
CHAR(5) 'Hello'는 5바이트 사용
CHAR(50) 'Hello'는 50바이트 사용 
 VARCHAR(n)
최대 n 까지(<=65535) 
VARCHAR(100)'Hello'는 5바이트 사용
VARCHAR(5) 'Hello'는 5바이트 사용

그러나 데이터 VARCHAR는 가변적인 데이터를 저장하기 때문에

업데이트 시 데이터 파편화가 이루어 진다고 합니다.

2015년 1월 2일 금요일

Mysql TimeStamp datetime

출처 : http://resl.tistory.com/13

MySQL에는 날짜 및 시간을 저장하는 데이터 타입이 여러가지 있습니다.

그 중 대표적인 것들이 datetime, date, 그리고 timestamp인데요
datetime은 날짜+시간, 즉 '2010-10-20 21:56:23' 와 같은 형식이고
date는 datetime에서 시간이 없는 '2010-10-20'의 형식입니다.

그럼 timestamp는 뭘까요?
timestamp도 datetime과 마찬가지로 '2010-10-20 21:56:23' 같은 형식을 갖습니다.


하지만 datetime은 '1000-01-01 00:00:00' 부터 '9999-12-31 23:59:59'의 범위를 갖고
timestamp는 '1970-01-01 00:00:01'부터 '2038-01-19 03:14:07'의 범위를 갖습니다.
바이트로 따지자면 datetime은 8바이트이고 timestamp는 4바이트입니다.

datetime은 주로 날짜 자체가 특정한 정보이고 이를 저장할 때 쓰이며,
timestamp는 그 자체가 주된 정보라기 보다는 해당 row가 언제 생겼는지, 또는 언제 업데이트 됐는지를 표시하기 위해 사용됩니다.

그래서 timestamp에서는 특별한 기능이 있습니다.
테이블을 생성할 때 timestamp 컬럼에는 다음과 같은 옵션을 줄 수 있습니다.
(컬럼 이름이 ts인 경우)

ts TIMESTAMP DEFAULT 0
=> 기본값을 0로 둡니다. 값을 바꾸기 위해서는 사용자가 직접 업데이트 해줘야 합니다.

ts TIMESTAMP DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP
=> 기본값이 0으로 생성되지만, 해당 row가 update되면 해당 시간으로 자동 업데이트됩니다.

ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP
=> row가 생성될 때의 시간이 기본값으로 들어갑니다. 자동으로 업데이트 되지는 않습니다.

ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
=> row가 생성될 때의 시간이 기본값이며, row가 update될 때 자동으로 업데이트 됩니다.

참고로 timestamp는 저장될 때 내부적으로 UTC를 기준으로 변환되어 저장됩니다.
즉, 같은 값이 저장되어 있더라도 timezone 설정이 어떻게 되어있느냐에 따라서 쿼리 결과가 달라질 수 있습니다.