반응형

 
  1. 특정 데이터베이스의 DEFAULT CHARACTER SET 확인 방법
    • SHOW CREATE DATABASE db_name;
    • 이렇게 하면, 해당 데이터베이스를 생성하는데 사용할 수 있는 DDL 문장을 보여주는데, 거기에 기본 문자셋에 대한 정보도 포함되어 있음.
  2. 특정 테이블의 DEFAULT CHARACTER SET 확인 방법
    • SHOW CREATE TABLE table_name;
    • 이렇게 하면, 데이터베이스와 동일하게 해당 테이블을 생성하는데 사용할 수 있는 DDL 문장을 보여주는데, 거기에 기본 문자셋에 대한 정보도 포함되어 있음.
  3. 특정 데이터베이스의 DEFAULT CHARACTER SET 수정하는 방법
    • ALTER DATABASE db_name [DEFAULT] CHARACTER SET = charset_name;
    • 참고로, 이 방법은 현재 이 데이터베이스에 속해있는 테이블들의 문자셋을 변경하는 것은 아님. 다만, 향후에 CREATE TABLE 문장으로 테이블(들)을 새로이 추가하려고 할 때 (해당 테이블들에 명시적으로 문자셋이 지정되지 않은 경우) 해당 테이블들이 기본적으로 가지게 될 DEFAULT 문자셋을 지정하는 것에 불과함.
  4. 특정 데이터베이스의 DEFAULT COLLATION 수정하는 방법
    • ALTER DATABASE db_name [DEFAULT] COLLATE = collation_name;
    • 참고로, 이 방법은 현재 이 데이터베이스에 속해있는 테이블들의 collation을 변경하는 것은 아님. 다만, 향후에 CREATE TABLE 문장으로 테이블(들)을 새로이 추가하려고 할 때 (해당 테이블들에 명시적으로 collation이 지정되지 않은 경우) 해당 테이블들이 기본적으로 가지게 될 DEFAULT collation을 지정하는 것에 불과함.
  5. 특정 테이블의 DEFAULT CHARACTER SET 수정하는 방법
    • ALTER TABLE table_name [DEFAULT] CHARACTER SET = charset_name;
    • 참고로, 이 방법은 현재 테이블에 들어가있는 칼럼들의 문자셋이나 collation을 변경하지는 않는다. 다만, 향후에 ALTER TABLE 문장으로 칼럼(들)을 새로이 추가하려고 할 때 (해당 칼럼들에 명시적으로 문자셋이나 collation이 지정되지 않은 경우) 해당 칼럼들이 기본적으로 가지게 될 DEFAULT 문자셋을 지정하는 것에 불과함.
    • collation도 함께 수정하려고 할 때는 다음과 같이 한다.
    • ALTER TABLE table_name [DEFAULT] CHARACTER SET = charset_name COLLATE = collation_name;
    • 만약, 이미 테이블에 포함되어있는 칼럼들에 지정되어있는 문자셋이나 collation을 수정하고 싶은 경우에는 다음과 같이 'CONVERT TO'를 사용해야 한다.
      • ALTER TABLE table_name CONVERT TO CHARACTER SET = charset_name [COLLATE =collation_name];
      • 이렇게 하면 현재 테이블에 포함되어있던 각 컬럼들에 지정되어있던 문자셋이 모두 동일하게 새로운 문자셋과 collation으로 변경되게 됨.
      • 그런데, 이렇게 'CONVERT TO'를 사용하면 새로운 문자셋이 기존의 문자셋보다 Max_len 이 큰 경우 각 컬럼들에 지정되어있던 데이터 타입의 크기 역시 함께 변경이 된다. (예를 들어, TEXT 타입이었다면 MEDIUMTEXT 타입으로 변경되기도 함) 또한 각 컬럼들에 저장되어있는 실제 '값'도 역시 새로운 문자셋으로 변경이 일어난다(매뉴얼에서는 이렇게 이야기하고 있는데, 직접 확인 필요)
      • 만약, 이렇게 데이터 타입의 크기나 '값'의 변화를 원하지 않는 경우에는 'CONVERT TO'를 사용하면 안되고 각 컬럼마다 'MODIFY' 명령어를 통해 각각 수정해주어야 함.
      • ALTER TABLE table_name MODIFY column_name VARCHAR(10) CHARACTER SET charset_name [COLLATE collation_name];
      • 좀 더 자세한 사항은 직접 매뉴얼을 참고할 것.
  6. [참고] 현재 시스템에서 지원하는 문자셋들의 목록을 보고 싶을 때
    • SHOW CHARACTER SET;
      • 이렇게 하면 지원하는 문자셋 목록을 모두 다 보여줌. 문자셋 이외에도 해당 문자셋이 선택되었을때 (별도로 명시적으로 collation을 지정하지 않았을때 사용되는) Default collation도 보여주고, 해당 문자셋이 최대 몇 바이트를 차지하는지에 대한 Maxlen 정보도 함께 보여줌.(고정폭 인코딩을 사용하는 문자셋이 아니라 가변폭 인코딩을 사용하는 문자셋도 있으므로 그야말로 Maxlen임)
    • 만약, 전체 목록이 아니라 필터를 사용해서 일부 목록만 보고 싶을 때는 다음과 같이 하면 된다.
    • SHOW CHARACTER SET LIKE '%euc%';
  7. [참고] 현재 시스템에서 지원하는 collation 목록을 보고 싶을 때
    • SHOW COLLATION;
      • 이렇게 하면 지원하는 collation 목록을 모두 다 보여줌. 해당 collation이 속해있는 문자셋 정보, 해당 collation이 Default collation인지 여부 등의 정보도 함께 보여줌.
    • 만약, 전체 목록이 아니라 필터를 사용해서 일부 목록만 보고 싶을 때는 다음과 같이 하면 된다.
    • SHOW COLLATION LIKE '%euc%';
    • 또한, 각 문자셋별로 Default collation만을 걸러서 보고 싶을 때는 다음과 같이 한다.
    • SHOW COLLATION WHERE 'Default' = 'Yes';

 

다시한번 강조하지만, 여기에서 정리한 것들은 이미 값이 들어가있는 테이블이나 칼럼 등에 영향을 주는 것이 아니라는 점... 헷갈리지 마시길!!! 
<출처: http://blog.naver.com/kumimo?Redirect=Log&logNo=80090608750 >


각 데이터베이스 별로 인코딩을 설정하기
1. 생성시
CREATE DATABASE [DB_NAME]  DEFAULT CHARACTER SET [char_set] COLLATE [coll_name];
ex> CREATE DATABASE db_name CHARACTER SET euckr COLLATE euckr_korean_ci;

2. 생성된 데이터베이스 수정시
ALTER DATABASE [DB_NAME] CHARACTER SET  [char_set] COLLATE  [coll_name];
ex> ALTER DATABASE db_name DEFAULT CHARACTER SET  euckr DEFAULT COLLATE  euckr_korean_ci;

3. 테이블의 텍스트 값과 기본 인코딩 변경하기
ALTER TABLE [TABLE_NAME] CONVERT TO CHARACTER SET [char_set];

위 명령은 컬럼들의 값을 바꾸는데, 값이 바뀌는 것을 원하지 않는 경우(예를 들어, 테이블은 latin1을 사용하는데 저장된 텍스트들은 utf8인 경우, 테이블의 캐릭터 셋만 바꾸면 되므로)엔 다음과 같이 칼럼별로 수행한다.

ALTER TABLE t1 CHANGE c1 c1 BLOB;
ALTER TABLE t1 CHANGE c1 c1 TEXT CHARACTER SET utf8;
ALTER TABLE t1 DEFAULT CHARACTER SET utf8;

반응형
데이터베이스로 Oracle을 사용하려고 Mysql은 설치하지 않을 생각이였다.
근데 기존 프로젝트를 서버에 올리고자 다시 Mysql을 설치 하지 않을수 없었다.

일단 Mysql 설치 방법으로는 apt-get 을 이용한 쉬운 방법이 있지만 다른 것들과의 연동을 위해
소스 설치로 설정하는 방법에 대해서 기술하겠다.

1. 소스다운 & 압축해제
# cd /usr/local/src
# wget http://ftp.linux.co.kr/pub/mysql/mysql-5.1.32.tar.gz  
# tar xvzf mysql-5.1.32.tar.gz

2. 컴파일 & 설치
# cd mysql-5.1.32
# ./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --with-charset=utf8
--with-charset=euckr --with-extra-charsets=all  --sysconfdir=/etc --enable-thread-safe-client
# make
# make install

3. 디비 생성 및 세부설정
# /usr/local/mysql/bin/mysql_install_db
# cat >> /etc/ld.so.conf
/usr/local/mysql/lib
# ldconfig
# cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf
# groupadd mysql
# useradd -M -g mysql -s /bin/false mysql
# chown root.mysql -R /usr/local/mysql/
# chown mysql.mysql -R /usr/local/mysql/data
# cd /usr/local/mysql/bin

4. my.cnf 오류처리
# vi /etc/my.cnf
# Disable Federated by default
#skip-federated(주석처리)

5. 데몬 실행 & 관리자 루트 비밀번호 생성
# ./mysqld_safe --user=mysql &
# ./mysqladmin -u root -p password 1234
Enter password:

6. 환경변수에 PATH 등록
# vi /etc/profile
export MYSQL_HOME=/usr/local/mysql
export PATH=$PATH:$MYSQL_HOME/bin
# source /etc/profile

7. 설치 확인
# mysql -u root -p
Enter password:

mysql> 

환영 메시지 출력시 완료......

8. 데몬 자동실행 등록
# cd /usr/local/mysql/share/mysql
# cp mysql.server /etc/init.d/mysqld
# chkconfig --add mysqld
# chkconfig mysqld on

이제 Mysql 설치는 완료 되었고 외부 접속을 허용하도록 하자.
특정 사용자 계정의 외부접속을 위해 root 를 예로 들도록 하겠다.

1. mysql 접속 후 mysql database 선택
mysql> use mysql;

2. user 테이블 살펴보기
mysql> select host, user, password from user;

root 의 host 값들은 localhost, 127.0.0.1 등으로 기본 등록되어 있지만, 외부접속을 나타내는 값이 없다.
특정 아이피로 지정할 수도 있지만 여기선 % 기호로 어디서든 접속 가능하게 만든다.

3. 권한 설정
mysql> grant all privileges on *.* to 'root'@'%' identified by '패스워드';
Query OK, 0 rows affected (0.03 sec)

4. 등록확인하기
mysql> select host, user, password from user;

root 계정의 host 필드에 % 가 등록되었는지 확인한다.

5. refrash
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

그리고 방화벽을 사용한다면 방화벽을 열어주도록 하자.
이로서 Mysql 설치가 완료 되었다.

외부 접속 툴로는 SQLGate 2010 for MySQL Developer 를 사용한다.(본인은)
http://www.antwiz.com/kr/   <== 여기에서 다운 받을수 있다. 개인버전 프리~
반응형

Oracle 에서 테이블의 컬룸의 값들이 자동으로 증가하도록 테이블을 구성하는 방법

우선 원하는 테이블을 생성한다

CREATE TABLE ajaxchat (
  id int NOT NULL ,
  user varchar(255) NOT NULL,
  msg varchar(255) NOT NULL,
  time int NOT NULL,
  PRIMARY KEY  (id)
);

그후 Sequence 테이블을 작성 한다 .

SQL>CREATE SEQUENCE id
        START WITH 1
        INCREMENT BY 1
        MAXVALUE 100000 ;

 

 시작 값이 1일고 1씩 증가하고, 최대값이 100000만이 되는 시퀀스를 생성했습니다.

그리고 값을 저장 할 때 이런식으로 insert 시킨다


 SQL>INSERT INTO ajaxchat(id, user, msg,time ) VALUES(id.NEXTVAL, ’julia’ , sysdate,1);

    empno는 컬럼값을 입력할 때 일일이 다음 값을 기억하지 않아도 NEXTVAL을 사용하여
    자동으로 입력할 수 있습니다.




 시퀀스란?


유일(UNIQUE)한 값을 생성해주는 오라클 객체입니다.

◈ 시퀀스를 생성하면 기본키와 같이 순차적으로 증가하는 컬럼을 자동적으로 생성할수 있습니다.

◈ 보통 primary key 값을 생성하기 위해 사용합니다.

◈ 메모리에 Cache되었을 때 Sequence 값의 액세스 효율이 증가 합니다.

◈ Sequence는 테이블과는 독립적으로 저장되고 생성됩니다. 따라서 하나의 sequence를
    여러 테이블에서 쓸 수 있습니다.
 



시퀀스 생성





START WITH : 시퀀스의 시작 값을 지정합니다. n을 1로 지정하면 1부터 순차적으로
                     시퀀스번호가 증가 합니다.

INCREMENT BY : 시퀀스의 증가 값을 말합니다. n을 2로 하면 2씩 증가합니다.
                        START WITH를 1로 하고 INCREMENT BY를 2으로 하면 1, 3, 5,7,.. 이렇게
                       시퀀스  번호가 증가하게 됩니다.

MAXVALUE n | NOMAXVALUE : MAXVALUE는 시퀀스가 증가할수 있는 최대값을 말합니다.                                             NOMAXVALUE는 시퀀스의 값을 무한대로 지정합니다.

MINVALUE n | NOMINVALUE : MINVALUE는 시퀀스의 최소값을 지정 합니다.
                                      기본값은 1이며, NOMINVALUE를 지정할 경우 최소값은 무한대가 됩니다

 


 SQL>CREATE SEQUENCE emp_seq
        START WITH 1
        INCREMENT BY 1
        MAXVALUE 100000 ;

      sequence created.

     시작 값이 1일고 1씩 증가하고, 최대값이 100000만이 되는 시퀀스를 생성했습니다.


 SQL>INSERT INTO emp(empno, ename, hiredate ) VALUES(emp_seq.NEXTVAL, 'julia' , sysdate);

    empno는 컬럼값을 입력할 때 일일이 다음 값을 기억하지 않아도 NEXTVAL을 사용하여
    자동으로 입력할 수 있습니다.

  CURRVAL : 현재 값을 반환 합니다. .
   NEXTVAL : 현재 시퀀스값의 다음 값을 반환 합니다.


 SQL>SELECT emp_seq.CURRVAL FROM DUAL ;

        CURRVAL
        ---------
                  1

 SQL>SELECT emp_seq.NEXTVAL FROM DUAL ;

       NEXTVAL
     ---------
                 2
 



사용규칙 


  ◈ NEXTVAL, CURRVAL을 사용할 수 있는 경우
    - subquery가 아닌 select문
    - insert문의 select절
    - insert문의 value절
    - update문의 set절


  ◈ NEXTVAL, CURRVAL을 사용할 수 없는 경우
    - view의 select절
    - distinct 키워드가 있는 select문
    - group by, having, order by절이 있는 select문
    - select, delete, update의 subquery
    - create table, alter table 명령의 default값


시퀀스의 수정 및 삭제





START WITH는 수정할수 없습니다.
START WITH 절이 없다는 점을 빼고는 CREATE SEQUENCE와 같습니다.
 


 SQL>ALTER SEQUENCE emp_seq
         INCREMENT BY 2
         CYCLE;

      sequence altered.

      2씩 증가하고, 최대값을 넘으면 다시 처음부터 순환하도록 수정하였습니다.


      DROP 문을로 필요하지 않은 시퀀스는 삭제 할수 있습니다.

 SQL>DROP SEQUENCE PRD_SEQ;
        sequence dropped.
 

  ================================================
    * 오라클 정보공유 커뮤니티 oracleclub.com
    * http://www.oracleclub.com
    * http://www.oramaster.net
    * 운영자 : 김정식 (oramaster _at_ naver.com)
  ================================================
※ oracleclub 강좌를 다른 홈페이지에 퍼가실 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

 

+ Recent posts