최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday

티스토리 뷰

   SQL 캐릭터셋 설정의 이유


그냥 기본값으로 (latin1로 되어있음) 쓸수도 있지만 속성 명령어를 일일이 DB, Table에 적용해줘야 하기 때문에 어떤 의미로는


필수적인 단계이다.


* 참고로 기본값으로 쓰면 다음과 같이 지정해주면 된다.


ALTER DATABASE 데이타베이스_이름 CHARACTER SET utf8 COLLATE utf8_general_ci;     //DB


ALTER TABLE 테이블_이름 CHARACTER SET utf8 COLLATE utf8_general_ci;     //TABLE


(혹은 DB를 만들면서 지정)


CREATE DATABASE 데이타베이스_이름 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;




   나의 SQL 캐릭터셋 리스트 보기


윈도우키 + R 을 누른뒤 > cmd 를 입력하여 도스 커맨드 창을 뛰운다.


기본 비번은 root / apmsetup 이니 알아두도록 하고 다음과 같이 mysql에 접속한다.


C:\> mysql -uroot -papmsetup


mysql> show variables like 'c%';   를 입력하면 현재 적용되어있는 캐릭터셋이 아래와 같이 리스트로 뜬다.



살펴보면 캐릭터셋의 설정이 모두 latin1 로 되어있다.


문제점1) phpAdmin같은 편리한 관리 도구로 테이블에 입력된 값을 살펴 볼 경우 한글이 죄다 ????으로 떠서 확인이 불가.


문제점2) 게다가 php로 select로 결과값을 받을때에도 @mysql_query('set names utf8')', 일일이 iconv() 메서드로 계속 인코딩을 


             관리해서 입/출력 해야한다.


문제점3) 위에 설명했듯이 ALTER로 속성을 바꿀수는 있지만... 이미 캐릭터가 입력되어서 서로 다른 타입이 테이블에 혼재할경우


            이래저래 엄청 일이 꼬이게 된다.



   my.ini 파일 수정


1. C:\APM_Setup\Server\MySQL5\data 에서 my.ini 파일을 편집기로 오픈한다.


이렇게 생긴 파일 맞다)



2. 정확히 아래 3개의 "[항목의]" 에서 다음의 문자열을 추가한다.


# The following options will be passed to all MySQL clients

[client]

default-character-set=utf8

port = 3306



# The MySQL server

[mysqld]

port = 3306

skip-locking

key_buffer_size = 16M

max_allowed_packet = 1M

table_open_cache = 64

sort_buffer_size = 512K

net_buffer_length = 8K

read_buffer_size = 256K

read_rnd_buffer_size = 512K

myisam_sort_buffer_size = 8M

skip-innodb


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


[mysql]

no-auto-rehash

default-character-set=utf8



3. 저장이 되었으면 현재 my.ini파일을 복사하여 APM_setup\Server\MYSQL에 붙여넣기 한다.


그러면 


APM_setup\Server\MYSQL5\data 폴더에 my.ini 한개 존재


APM_setup\Server\MYSQL5 폴더에 my.ini 한개 존재 


총 두개의 my.ini가 존재 할 것이다.


data 하위에 my.ini가 없으면 APMSETUP모니터가 작동하지 않기때문에 이렇게 조치 하는것이다.




4. 수정이 끝났으면 mysql을 재시작 해야 하는데


ㄱ. APM프로그램에서 stop을 누른뒤 다시 Start를 누르거나 (추천)


ㄴ. mysql> quit; 


    c:\>mysqladmin -uroot -papmsetup reload    라는 커맨드로 입력해도 된다.





   캐릭터셋 변경 확인


수정이 잘 되었는지 반드시 확인해야 한다.


열려있던 도스콘솔창을 닫고, 다시 실행한다.


C:\> mysql -uroot -papmsetup   mysql에 로그인한 뒤


mysql> show variables link 'c%';   명령어를 치면 아래와 같이 전부 utf8로 잘 변경되어져있다.





   이후 데이터 값의 확인은 phpMyAdmin 에서


http://localhost/myadmin/index.php 에 접속하면 아래 처럼 SQL 관리 도구가 뜬다.


역시 비번과 이이디는 root / apmsetup 으로 동일하다.


앞으로의 데이터베이스 열람은 cmd에서 명령기반(아마도 select)의 모니터링이 아니라 phpMyAdmin으로 확인할 것이다.


* 참고로 phpMyAdmin의 세션 만료시간이 1440초(24분)으로 되어있기 때문에 매우 불편하다. 이것을 10시간으로 바꿔 놓는 작업을


  여기( http://serpiko.tistory.com/558 )에서 확인할 수 있다.




ps. 캐릭터셋 때문에 하도 고생을 해서 10번 이상의 임상실험을 통해 계속해서 반복적으로 성공한 구성을 튜토리얼로 기록 남겨둔다.

   

       2~3시간 삽질한 것 같은데 "euc-kr / utf-8" 도 아니고 하필 latin1 이라니... 이래저래 다른 유저들도 참 많이 고생할듯.






'■ 백엔드 ■ > PHP' 카테고리의 다른 글

5. 학생기록부 프로그램 - 테이블로 몸풀기  (0) 2014.02.13
4. 데이터 베이스 만들기  (0) 2014.02.12
2. 개발 툴 설치  (0) 2014.02.12
1. APM 설치  (0) 2014.02.11
php-excel-reader 적용하기  (0) 2014.02.04
댓글