[mysql] Data Type

by Blogger 하얀쿠아
2014. 5. 4. 02:22 소프트웨어 Note/데이터베이스

MySQL Column Type

 

컬럼(Column)은 데이타 베이스를 이루는 가장 작은 단위이다. 컬럼들이 모여서 레코드(Record)를 이루고, 레코들들이 모여서 테이블(Table)이 된다. 테이블이 모여서 데이타 베이스를 이루게 된다. 즉, 데이타 베이스를 데이타들의 계층적 구조라고 말한다. 

TINYINT

부호있는 수는 -128에서 127까지, 부호 없는 수는 0에서 255까지 표현할 수 있다. 1 바이트

※디폴트는 부호있는거(SIGNED),  UNSIGNED를 붙이면 부호없는것~


SMALLINT

부호있는 수는 -32768에서 32767까지, 부호 없는 수는 0에서 65535까지 표현할 수 있다. 2 바이트

※디폴트는 부호있는거(SIGNED),  UNSIGNED를 붙이면 부호없는것~


MEDIUMINT

부호있는 수는 -8388608부터 8388607까지, 부호없는 수는 0에서 16777215까지의 수를 표현할 수 있다. 3 바이트

※디폴트는 부호있는거(SIGNED),  UNSIGNED를 붙이면 부호없는것~


INT [unsigned]

부호있는 수는 -2147483648부터 2147483647까지, 부호없는 수는 0에서 4294967295까지의 수를 표현할 수 있다[unsigned]. 4 바이트

※디폴트는 부호있는거(SIGNED),  UNSIGNED를 붙이면 부호없는것~

 

※ zerofill를 이용하면 남는 공간 0으로 채우기가 가능하다.

※ int형 선언시 (숫자)를 안써주면 int(11)가 디폴트로 되며 int(숫자)는 자릿수 제한이

아닙니다.

int(5)와 int(11)는 데이타크기가 같으며 입력하는 가격 범위도 같습니다.다른점은

int데이타형 뒤에 zerofill 을 붙여주면 int형뒤에 숫자보다 자릿수가 작으면 0으로 자동으로

채워진다.같거나 크면 당연히 안채워진다. zerofill을 사용했을때 최대 자릿수는 10이다.

 

※ int 키워드 뒤에 괄호안 숫자는 제한이 없습니다. 테이블 생성시 zerofill 키워드를 사용하게

되면 해당 괄호안에 숫자만큼의 선행제로 처리가 되어 출력됩니다.

 

INTEGER

INT와 같다.

 

BIGINT

부호있는 수는 -9223372036854775808부터 9223372036854775807까지의 수를 표현할 수 있고, 부호없는 수는 0부터 18446744073709551615까지 표현할 수 있다. 8바이트


FLOAT

단일 정밀도를 가진 부동 소수점을 나타낸다. 언제나 부호 있는 수이고, -3.402823466E+38부터 3.402823466E+38까지의 수를 표현할 수 있다.

 

※ mysql,에서의 float는 실수를 저장하는 데이타형입니다.

하지만 1.11이나 1.23은 잘들어가지는데 1.00이나 1.10 같은 마지막 0은 들어가지지 않습니다.

왜냐하면 자동으로 0은 절삭됩니다. 하지만 table생성시 float가 아닌 float(5,2)로 주면 소수점2자리까지만 입력이 되며 빈공간은 0으로 채워집니다.

앞에것은 잘 모르겠지만 뒤에꺼는 필수 소수점자리입니다. 빈공간은 0으로 자동으로 채워집니다.

 

DOUBLE

2배 정밀도를 가진 부동 소수점 수이다. 언제나 부호있는 수이고, -1.79769313486231517E+308부터 1.7976931348623157E+308까지의
수를 표현할 수 있다.


DATE

날짜를 표현하는 타입으로 '1000-01-01'부터 '9999-12-31'까지를 나타낼 수 있다. 3 바이트


DATETIME

날짜와 시간을 같이 나타내는 타입이다. '1000-01-01 00:00:00'부터 '9999-12-31 23:59:59'까지 나타낼 수 있다. 8 바이트


TIMESTAMP

'1970-01-01 00:00:00'부터 2037년까지 나타낼 수 있다. 4 바이트


TIME

시간을 나타낸다. '-839:59:59'부터 '838:59:59'까지 나타낼 수 있다.


YEAR

년도를 나타낸다. 1901년부터 2155년, 0000년을 나타낼 수 있다.


CHAR(M)

고정 길이를 갖는 문자열을 저장할 수 있다. M은 1부터255까지이다.M이 20이면 20개의

문자를 저장할 수 있다.

※ binary옵션을 붙일시 대소문자를 구분합니다.

 

VARCHAR(M)

CHAR는 고정길이인 반면 VARCHAR는 가변 길이이다. 예를 들어 VARCHAR(20)인 컬럼에

10자만 저장을 하면, 실제로도 10자 만큼을 기억장소를 차지한다. 하지만, CHAR는 나머지

10자를 공백으로 매꾼다.최대 255자까지 저장가능

※ binary옵션을 붙일시 대소문자를 구분합니다.

 

TINYTEXT

255개의 문자를 저장할 수 있다.

 

ENUM('value1','value2')

65,535개의 문자를 선택하여 대입할수있다. value에서 지정하지 않은 값은 에러는 안나나 공백으로 들어가진다.

※ binary옵션을 붙일시 대소문자를 구분합니다.

※ 데이타 크기 : 2 바이트

 

TEXT (텍스트 파일)

65,535개의 문자를 저장할 수 있다.

※ binary 옵션을 기재하면 검색시 소문자를 구분합니다.

※ TEXT데이타형은 default 예약어 사용 못함


MEDIUMTEXT (텍스트 파일)

16,777,215개의 문자를 저장할수 있다.

데이타크기 : 3바이트


LONGTEXT (텍스트파일)

4,294,967,295개의 문자를 저장할수 있다.

데이타크기 : 4바이트

 

BLOB(이진 파일)

65535개의 문자를 저장할 수 있다. BLOB은 BINARY LARGE OBJECT의 약자이다.

일반문자열이 아닌 멀티미디어파일(이미지,영상등)을 넣을때 사용하는 컬럼입니다.

ex : 많이 사용하지 않는다.

 

(TEXT : blob의 차이) blob : binary large object

0.text나 blob는 둘다 default를 사용못한다.

1.TEXT는 대소문자 안가린다. BLOB는 대소문자 가린다.

2.제한크기보다 작은 크기를 입력해도 둘다 공백이 제거되지 않고 공백도 다같이 저장된다. varchar개념이 아닌 char개념이다.

3.테이블이아닌 다른 영역에 저장된다. 적당히 사용하자

4.INDEX생성이 불가능하다.괜히 모르고 했다가는 용량만 커지고 index는 절대 안탄다. FULLTEXT를 이용한다.

 

MEDIUMBLOB

16777215개의 문자를 저장할 수 있다.

일반text가 아닌 멀티미디어파일을 넣을때 사용하는 컬럼입니다.

ex : 많이 사용하지 않는다.

 

MEDIUMTEXT

TEXT형에 저장되지 않는 큰문자열은 MEDIUMTEXT형을 사용한다.

16,777,215개의 문자를 저장할 수 있다.

ex : alter table zet_blog_data modify content MEDIUMTEXT;

 

LONGBLOB

4294967295(4기가)개의 문자를 저장할 수 있다.

일반text가 아닌 멀티미디어파일을 넣을때 사용하는 컬럼입니다.

ex : 많이 사용하지 않는다.

 

LONGTEXT

4,294,967,295(4기가)개의 문자를 저장할 수 있다.


출처 : http://zetswing.com/bbs/board.php?bo_table=MySQL_LEC&wr_id=1&page=2

'소프트웨어 Note > 데이터베이스' 카테고리의 다른 글

[mysql] Data Type  (0) 2014.05.04
[mysql] 암/복호화  (0) 2011.04.16
이 댓글을 비밀 댓글로

[우분투] Ubuntu에 Mysql 설치

by Blogger 하얀쿠아
2011. 12. 28. 13:50 소프트웨어 Note/Linux

Ubuntu에 Mysql 설치



1. 우분투에서는 다음과 같이 입력하면 mysql 에 관련된 패키지를 검색하게 됩니다.

$sudo apt-cache search mysql

그중에서 필요한걸 골라서 설치하면 됩니다. (mysql 서버 데몬을 설치하는 경우 바로 2번 부터)


2. mysql 서버 설치


$sudo apt-get install mysql-server


3. mysql 클라이언트 설치


$sudo apt-get install mysql-client


4. mysql 서버 설치 직후 UTF-8 설정을 해줍니다
.
 해주지 않을 경우 latin1 로 character encoding 이 자동 설정되는데, 이걸 그대로 두면, 한글 처리할때 난관이 찾아올것입니다.

my.cnf 파일을 편집하기 위해 vi에디터로 해당 파일을 열어줍니다.

$sudo vi /etc/mysql/my.cnf

아래와 같은 내용을 추가해줍니다. [ ] 은 이미 my.cnf 에 있고 그 아래에 내용들을 추가.

 [client]
default-character-set=utf8

[mysqld]
character-set-client-handshake=FALSE
init_connect="SET collation_connection = utf8_general_ci"
init_connect="SET NAMES utf8"
default-character-set=utf8
character-set-server=utf8
collation-server=utf8_general_ci

[mysqldump]
default-character-set=utf8

[mysql]
default-character-set=utf8



5. mysql 을 재시작 해줍니다.

$sudo /etc/init.d/mysql restart


6. 변경 여부 확인은 다음과 같이.

$mysql -u id -p
mysql> status


 


이 댓글을 비밀 댓글로
  1. 유용하게 참고할 수 있을 것 같네요 ㅎ.ㅎ

[mysql] 암/복호화

by Blogger 하얀쿠아
2011. 4. 16. 03:25 소프트웨어 Note/데이터베이스

Oracle을 사용하던 사람들이 MySQL을 사용할 때 착각하기 쉬운 것 중 하나가
바로 DECODE 일 것이다.

내 블로그에 있는 http://blackbull.tistory.com/10
글을 보면, Oracle에서 사용하던 DECODE 에 대해 설명하고 있으니 그것은 별도로 참고하고,

오늘은 MySQL만을 살펴보도록 하자.

MySQL 툴이나, 기타 SQL관련 프로그램을 사용하다보면,
MySQL에서 DECODE의 글씨 색이 다른 것을 볼 수 있으며,
이미 예약어로 잡혀있는 것을 볼 수 있을 것이다.

즉, MySQL도 DECODE가 존재 한다는 것인데,
웃기게도 이것 때문에 Oracle의 DECODE와 혼동하는 사람들을 매번 낚고 있다 --;;


[MySQL에서 help를 이용하여 DECODE에 대해 알아본 결과]
************************************************************************************************
mysql> help decode
Name: 'DECODE'
Description:
Syntax:
DECODE(crypt_str,pass_str)

Decrypts the encrypted string crypt_str using pass_str as the password
crypt_str should be a string returned from ENCODE().

URL: http://dev.mysql.com/doc/refman/5.0/en/encryption-functions.html
************************************************************************************************

[DECODE, ENCODE 사용방법]
DECODE(암호화 할 대상 문자열, 암호화 용도로 사용되는 패스워드 키)
ENCODE(암호화 할 대상 문자열, 암호화 용도로 사용되는 패스워드 키)

[DECODE, ENCODE 설명]
MySQL에서의 DECODE는,
ENCODE 로 encryptioin 된 문자열을 역으로 바꿀 때 사용하는 함수이다.


바꿔 말하자면,
ENCODE 된 문자열이 존재해야 DECODE를 사용할 수 있다는 의미이다.

가령,
CREATE TABLE test (
  str blob
)ENGINE=INNODB DEFAULT CHARSET=UTF8;


이라고 테이블을 생성하고,
encryption된 값을 대입해 보자.

단, 여기서 주의할 점은 문자열이 encryption될 경우,
어떤 문자가 올지 모르기 때문에,
반드시 blob과 같은 binary형태의 자료형을 선언해 두어야 한다는 것이다.
만약 문자열이라고 char, varchar, text 등으로 자료형을 선언한다면,
warning 메세지를 받게 되며, 데이터가 입력되지 않게 된다.

아무튼,
INSERT test (str) VALUES (ENCODE('My Love Is Forever', 'Love'));
라고 입력 후

SELECT str FROM test;
해보자.

결과는?
*************************************************************************
jw
tj"R
*************************************************************************
라고 나온다.

즉, 'My Love Is Forever' 라는 문자열이, 특정한 알고리즘을 이용하여,
'Love' 라는 키워드를 이용하여 위의 결과와 같은 암호화된 결과를 만들어 낸 것이다.

그렇다면, 만약 이것을 정상적으로 보고자 한다면?

SELECT DECODE(str, 'Love') FROM test;
라고 해보자.

결과는?
*************************************************************************
My Love Is Forever
*************************************************************************
라고 나온다.


[결론]
자!!!
이것이 바로 MySQL의 DECODE인 것이다!!!!!!

그러니 앞으로 Oracle의 DECODE와 햇갈리는 사태를 벌이지 말도록 하자~


'소프트웨어 Note > 데이터베이스' 카테고리의 다른 글

[mysql] Data Type  (0) 2014.05.04
[mysql] 암/복호화  (0) 2011.04.16
이 댓글을 비밀 댓글로