Jan 09 2010

WorkBench에서 Encoding 변환해서 보기

분류: Database, mysql최 태현 @ 12:21 오전

SQL Editor에서 한글이 깨질경우 다음과 같이 화면 encoding을 변환해서 실행한다.

SET NAMES ‘euckr’;


Jan 08 2010

신성동 작은도서관 DB 분석

분류: Database, mysql최 태현 @ 12:47 오전

책갈피 프로그램이 MySQL DB를 사용하고 있어서 Dump를 받아왔는데 latin-1으로 charset이 되어 있어서 utf-8로 전환하였다.

다른 방법도 있겠지만 Dump를 받아온것이라 vim 을 통해 간단히 전환했다.

일단 vim으로 euc-kr로 인코딩되어 있는 dump 파일을 Loading 하면  문자가 깨져 보일것이다. 이때 다음과 같이 인코딩을 바꾸면 제대로 보인다.

:e ++enc=euc-kr

이 상태에서 인코딩을 바꿔서 저장하려면

:set fileencoding=utf-8

이렇게 하면 간단히 문자 인코딩을 변경할 수 있다.

이상태에서 다음과 같이 Dump File을 DB로 올려봤지만 …..

mysql -u root -p slibrary < sinsung.sql

ERROR 1071 (42000): Specified key was too long; max key length is 1000 bytes.

위와 같은 메시지가 나오면서 설치가 중단되는데,  그 이유는 mysql 이 key 의 길이를 1000바이트로 제한하기 때문이다.

mysql 측에서는 이걸 버그라 보지 않고 “제한”이라고 봐서 당분간은 처리할 용의가 없답니다.

latin-1 에서는 1글자가 1바이트이지만 utf-8 에서는 한글자가 3바이트이기 때문에 크기 계산에 주의해야 한다.

latin1 = 1 byte  = 1 chararcter
uft8    = 3 byte = 1 chararcter

즉, varchar(255)에서 255는 255 “바이트”가 아니라 “글자”이기 때문이다. utf-8일 경우 한글은 한 글자당 3바이트이므로 255 * 3 * 2 > 1000 이다.

해결방법은

CREATE TABLE bookadd_tbl (
S_ID varchar(20) NOT NULL default ”,
ADD_SEQ varchar(14) NOT NULL default ”,
ADD_NM1 varchar(200) default NULL,
ADD_AUTH varchar(128) default NULL,
ADD_CHUL varchar(128) default NULL,
ADD_YEAR varchar(60) default NULL,
ADD_TYPE varchar(100) default NULL,
ADD_LENGTH varchar(100) default NULL,
ADD_PAGE varchar(100) default NULL,
ADD_ETC varchar(255) default NULL,
ADD_DATE varchar(24) default NULL,
ADD_MARC longtext,
PRIMARY KEY  (S_ID,ADD_SEQ),
KEY ADD_TYPE (ADD_TYPE),
KEY ADD_NM1 (ADD_NM1,ADD_AUTH,ADD_CHUL)
) TYPE=MyISAM;

에서 TYPE… 부분을 ENGINE=InnoDB DEFAULT CHARSET=utf8 로 하면 된다.

왜 되는지는 정확히 모르겠다.


Jan 07 2010

MySQL Dump뜨는 방법 및 복구 방법

분류: mysql최 태현 @ 1:00 오전

1. 덤프뜨기

$> mysqldump -u[사용자아이디] -p 데이터베이스명 [테이블명] > 저장될 파일명
예) mysqldump -ukamkami -p mydatabase > kamkami.pe.kr.sql

이렇게 하면 디비(mydatabase)를 몽땅 덤프를 뜨게된다.

테이블만 덤프를 뜨고 싶다면

예) mysqldump -ukamkami -p mydatabase member_table > kamkami.pe.kr.member_table.sql

이렇게 하면 테이블만 덤프를 뜰 수 있다.

2. 복구하기

덤프 파일을 가지고 복구를 하는 방법도 간단하다.
$> mysql -u[사용자아이디] -p [디비명] < 덤프파일명

예) mysql -ukamkami -p < kamkami.pe.kr.sql
예) mysql -ukamkami -p mydatabase < kamkami.pe.kr.member_table.sql

1.특정 db의 특정 table에서 원하는 값만 덤프받기

>> edu라는 디비에 a,b,c라는 테이블이 있다. 여기서 a라는 테이블에서 no가 7번이상이고 10번
이하인 값만 덤프를 받고자 한다. 어떻게 하겠는가?
여기서 사용되는 옵션은 -w 이다.그럼 위 질문의 sql문은 아래와 같다

mysqldump -u mysql_admin -p edu a -w’no=>7 and no=<10′ > edu_a_cond.sql

위와같이 하면 no가 7~10번까지가 덤프될것이다.
위에서 조건문은 -w 다음에 싱글쿼테이션으로 묶어준다. sql에서 사용하는 조건문이 다 될듯싶

다. 모두 테스트를 해보진 않았다.

2.디비 스키마(Schema)만 백업받기

>>초기에 작성해 놓은 테이블 스키마가 없을때 어떻게 하겠는가?
만약 하나의 테이블이라면 desc 해서 일일이 다 삽질을 하면 되것지만 만약 테이블이 100개라

면 ..크억…이럴때 사용하는 mysqldump옵션이 있습니다.
-d 입니다.

!.edu라는 디비의 모든 테이블 스키마를 백업받으려면

mysqldump -u mysql_admin -p -d edu > edu_db.sql

!.edu라는 디비의 a라는 테이블 스키마를 백업받으려면

mysqldump -u mysql_admin -p -d edu a> edu_a_table.sql