2014/08/05 - [서버에웹환경구축하기/5.마리아DB(MariaDB) 설치] - [서버구축 - 11] 서버에 MySQL과 동일한 마리아DB(MariaDB) 설치하기
2014/08/05 - [서버에웹환경구축하기/5.마리아DB(MariaDB) 설치] - [서버구축 - 12] 마리아DB(MariaDB) 인코딩 UTF-8 설정하기
mysql 설치 시 UTF-8 환경으로 default 설치 되는 경우도 있지만, 본인처럼 한글이 깨지는 현상 발생시 mysql 환경을 utf-8으로 맞춰주는 포스팅을 진행하고자 한다.
대부분 mysql 기본 설치 시, 인코딩 타입이 latin(?) 타입으로 주로 설치되는것을 확인 할 수 있었다.
다음 명령어를 통하여 본인의 mysql 문자 인코딩을 확인하도록 하자
SHOW VARIABLES LIKE 'c%'
* 문자 인코딩 목록확인
확인결과 system 부분만 utf8이고 그외에는 latin1으로 인코딩 되어있다.
다음 파일을 수정하여 utf8 환경으로 변경 하도록 하자
윈도우일경우 my.ini
리눅스일경우 my.cnf
파일을 찾아서 각각 위치에 맞추어 추가를 해주도록 하자
본인은 local환경이 윈도우에 APM 파일을 설치하여 확인한 결과이다.
100% 되는방법이라고 장담은 못한다. 보편적인 방법을 설명하는 것 뿐이다.
본인의 경우, 윈도우/리눅스 MySQL 설치 후, 인코딩 설정시에는 적용이 되서 포스팅을 한것임.
* my.ini 또는 my.cnf 코드 추가
[client] . . #하단추가 default-character-set = utf8 [mysqld] . . #하단추가 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
데몬 재실행 후 다시한번 인코딩 확인 명령어를 찍어서 확인해보도록 하자
* 문자 인코딩 목록 재확인(1)
위와같이 대부분 utf8로 잡혔다 하지만 database 부분에 대해서는 latin1이 여전히 적용되있었다 .
아마 기존에 신규 생성된 database가 latin1으로 생성되서 그런거 같다.
그래서 신규 생성했던 2가지 database 를 제거 후 다시한번 확인 해보았다.
* 문자 인코딩 목록 재확인(2)
확인결과 정상적으로 UTF-8 로 인코딩 타입이 적용되었다.
도움이 되셨다면 공감클릭! 궁금하신점은 댓글!!
MySQL LIMIT를 사용하여 페이징쿼리를 동작시켜보자 (0) | 2014.08.15 |
---|---|
MySQL SELECT 쿼리로 한꺼번에 다른 테이블에 INSERT 하기 (INSERT ... SELECT ... FROM ...) (0) | 2014.08.12 |
MySQL 시퀀스 auto_increment 생성 및 초기화하기 (0) | 2014.08.11 |
MySQL 대소문자 구분 안하기 - lower_case_table_names 변경 (7) | 2014.07.10 |
MySQL GROUP CONCAT 이용하여 쿼리목록을 컬럼 하나로 보여주기 (세로를 가로로) (0) | 2014.07.09 |
2014/08/12 - [DB/Oracle] - 오라클 계층형 트리구조 쿼리 (재귀호출) - START WITH .. CONNECT BY PRIOR
MS-SQL 2005 부터 추가된 재귀쿼리를 설명 하고자 한다.
트리구조 쿼리에 사용하면 유용할 거 같아서 포스팅을 하게 되었다.
with xxx(col 1,col 2...col n)
as (
table
union
table
)
select * from xxx order by order column
오라클 재귀쿼리 호출했던 같은 구조의 테이블로 샘플을 짜보겠다.
2014/08/12 - [DB/Oracle] - 오라클 계층형 트리구조 쿼리 (재귀호출) - START WITH .. CONNECT BY PRIOR
1. 테이블 생성
create table tree_table( id int not null, parent_id int not null, name nvarchar(30) not null );
2. 트리쿼리 출력을 위한 임의의 데이터 생성
-- 1depth insert into tree_table(id,parent_id,name) values(1,0,'1depth 1'); insert into tree_table(id,parent_id,name) values(2,0,'1depth 2'); insert into tree_table(id,parent_id,name) values(3,0,'1depth 3'); -- 2depth 1 insert into tree_table(id,parent_id,name) values(4,1,'2depth 1-1'); insert into tree_table(id,parent_id,name) values(5,1,'2depth 1-2'); insert into tree_table(id,parent_id,name) values(6,1,'2depth 1-3'); -- 2depth 2 insert into tree_table(id,parent_id,name) values(7,2,'2depth 2-1'); insert into tree_table(id,parent_id,name) values(8,2,'2depth 2-2'); insert into tree_table(id,parent_id,name) values(9,2,'2depth 2-3'); -- 3depth 1 insert into tree_table(id,parent_id,name) values(10,4,'3depth 1-1'); insert into tree_table(id,parent_id,name) values(11,4,'3depth 1-2'); insert into tree_table(id,parent_id,name) values(12,4,'3depth 1-3');
3. 재귀쿼리로 트리목록 출력
WITH tree_query AS ( SELECT id , parent_id , name , convert(varchar(255), id) sort , convert(varchar(255), name) depth_fullname FROM tree_table WHERE parent_id = 0 UNION ALL SELECT B.id , B.parent_id , B.name , convert(varchar(255), convert(nvarchar,C.sort) + ' > ' + convert(varchar(255), B.id)) sort , convert(varchar(255), convert(nvarchar,C.depth_fullname) + ' > ' + convert(varchar(255), B.name)) depth_fullname FROM tree_table B, tree_query C WHERE B.parent_id = C.id ) SELECT id, parent_id, name, depth_fullname FROM tree_query order by SORT
위의 재귀쿼리 실행결과를 확인해 보도록 하자
위와같이 트리구조로 출력되는것을 확인하였다.
구조로 따지자면,
1depth 1
|
-------- 2depth 1-1
| |
| ---- 3depth 1-1
| |
| ---- 3depth 1-2
| |
| ---- 3depth 1-3
-------- 2depth 1-2
|
-------- 2depth 1-3
|
1depth 2
|
-------- 2depth 2-1
|
-------- 2depth 2-2
|
-------- 2depth 2-2
|
1depth 3
와같은 구조로 출력되었다.
정렬이 중요한대 위의 정렬은 데이터가 많지 않아 잘 나오는거같다.
만약 재귀쿼리가 정상적으로 출력이 되지 않으면 sort에 대한 부분은 고민하고 수정해보도록 하자.
마지막으로 잘 활용해서 실무에 적용해보도록 합시다~
도움이 되셨다면 공감클릭! 궁금하신점은 댓글!!
MS-SQL - 널체크(ISNULL 사용하기) (0) | 2014.08.23 |
---|---|
MS-SQL 2005 이상 row_number() over(order by 정렬조건) 을 이용하여 페이징쿼리를 동작시켜보자 (0) | 2014.08.15 |
MS-SQL SELECT 쿼리로 다른 테이블로 INSERT (INSERT SELECT FROM , SELECT INTO FROM) (1) | 2014.08.13 |
MS-SQL 시퀀스 identity 생성 및 초기화하기 (0) | 2014.08.11 |
이번 포스팅은 계층형 트리구조 쿼리를 이요하여 트리구조 출력을 하려한다.
오라클에서 계층형 트리는
START WITH .. CONNECT BY PRIOR 구문을 이용하여 트리구조를 심플하게 출력할 수 있다.
데이터 예를 들도록 해보자
1. 테이블 생성
create table tree_table( id number not null, parent_id number not null, name nvarchar2(30) not null );
2. 트리쿼리 출력을 위한 임의의 데이터 생성
-- 1depth insert into tree_table(id,parent_id,name) values(1,0,'1depth 1'); insert into tree_table(id,parent_id,name) values(2,0,'1depth 2'); insert into tree_table(id,parent_id,name) values(3,0,'1depth 3'); -- 2depth 1 insert into tree_table(id,parent_id,name) values(4,1,'2depth 1-1'); insert into tree_table(id,parent_id,name) values(5,1,'2depth 1-2'); insert into tree_table(id,parent_id,name) values(6,1,'2depth 1-3'); -- 2depth 2 insert into tree_table(id,parent_id,name) values(7,2,'2depth 2-1'); insert into tree_table(id,parent_id,name) values(8,2,'2depth 2-2'); insert into tree_table(id,parent_id,name) values(9,2,'2depth 2-3'); -- 3depth 1 insert into tree_table(id,parent_id,name) values(10,4,'3depth 1-1'); insert into tree_table(id,parent_id,name) values(11,4,'3depth 1-2'); insert into tree_table(id,parent_id,name) values(12,4,'3depth 1-3');
3. 재귀쿼리로 트리목록 출력
SELECT id,parent_id,name, LTRIM (SYS_CONNECT_BY_PATH (name, ' > '), ' > ') AS depth_fullname FROM tree_table START WITH parent_id = 0 CONNECT BY PRIOR id=parent_id
위의 재귀쿼리 실행결과를 확인해 보도록 하자
※ ORACLE 11g 에서 ms-sql 2005에서 제공되는 재귀쿼리가 동일하게 동작된다.
다음과 같이 쿼리문을 주어서 실행 하더라도 같은 결과가 출력된다.
WITH tree_query(id,parent_id,name,sort, depth_fullname) AS ( SELECT id , parent_id , name , ''||id as sort , ''||name as depth_fullname FROM tree_table WHERE parent_id = 0 UNION ALL SELECT B.id , B.parent_id , B.name , C.sort || ' > ' || B.id as sort , C.depth_fullname || ' > ' || B.name as depth_fullname FROM tree_table B, tree_query C WHERE B.parent_id = C.id ) SELECT id, parent_id, name,depth_fullname FROM tree_query order by sort
위와같이 트리구조로 잘 조회되었다.
1depth 1
|
-------- 2depth 1-1
| |
| ---- 3depth 1-1
| |
| ---- 3depth 1-2
| |
| ---- 3depth 1-3
-------- 2depth 1-2
|
-------- 2depth 1-3
|
1depth 2
|
-------- 2depth 2-1
|
-------- 2depth 2-2
|
-------- 2depth 2-2
|
1depth 3
위와같은 구조로 출력된 셈이다.
잘 활용해서 실무에 적용해보도록 합시다~
도움이 되셨다면 공감클릭! 궁금하신점은 댓글!!
Oracle - if ~ else 조건문 사용하기 : DECODE (0) | 2014.08.24 |
---|---|
오라클 - 널체크(NVL 사용하기) (0) | 2014.08.23 |
ORACLE 오라클 rownum을 이용하여 페이징 처리하기 (0) | 2014.08.15 |
오라클(Oracle) 데이터를 일괄로 다른테이블에 INSERT 하기 (INSERT INTO ... SELECT ... FROM ...) (2) | 2014.08.13 |
오라클(Oracle) sequence 생성, 등록, 최종 시퀀스값 조회하기 (2) | 2014.08.11 |
2014/08/11 - [DB/MSSQL] - MS-SQL 시퀀스 identity 생성 및 초기화하기
2014/08/11 - [DB/MySQL] - MySQL 시퀀스 auto_increment 생성 및 초기화하기
1. 오라클 시퀀스 생성하기
CREATE SEQUENCE 시퀀스명
CREATE SEQUENCE 시퀀스명 START WITH n INCREMENT BY n MAXVALUE n | NOMAXVALUE MINVALUE n | NOMINVALUE
위의 옵션에 대해서 추가 설명을 드리자면,
START WITH n ▶ n = 초기화 값
INCREMENT BY n ▶ n = 증가값
MAXVALUE n ▶ n = 최대값 또는 NOMAXVALUE = 무한대 값
MINVALUE n ▶ n = 최소값 또는 NOMINVALUE = 무한대 값
을 의미한다.
그렇다면 이제 시퀀스 생성을 해보도록 하자
시퀀스 명 = test_seq
초기값 = 1
증가값 = 1
최대값 = 10000
create sequence test_seq start with 1 increment BY 1 maxvalue 10000
위와같이 정상적으로 성공한 메시지가 출력되었다.
생성한 시퀀스를 정상적으로 확인 하기 위해서 테이블을 하나 생성하여 시퀀스적용을 해보도록 하자
테이블 구조는 지난 포스팅인 MySQL에서의 시퀀스 샘플링 테이블과 같은구조로 생성 하겠다.
2014/08/11 - [DB/MySQL] - MySQL 시퀀스 auto_increment 생성 및 초기화하기
CREATE TABLE test_board( seq NUMBER NOT NULL PRIMARY KEY, title NVARCHAR2(20) NOT NULL );
위와 같이 생성하였다면 seq 컬럼에 시퀀스를 적용해보도록 하겠다.
insert문으로 시퀀스 + 데이터를 삽입한 후, select문을 통해 삽입된 데이터를 확인해보도록 하자
INSERT INTO test_board(seq,title) VALUES(test_seq.nextval,'hello'); INSERT INTO test_board(seq,title) VALUES(test_seq.nextval,'hello2'); INSERT INTO test_board(seq,title) VALUES(test_seq.nextval,'hello3'); select * From test_board;
위와같이 정상적으로 seq 컬럼이 자동증가 하였다.
2. 시퀀스 등록
테이블[자동증가컬럼명]-시퀀스명.NEXTVAL
3. insert문 실행 후 최종(현재) 시퀀스값 조회
SELECT 시퀀스명.CURRVAL FROM DUAL
INSERT INTO test_board(seq,title) VALUES(test_seq.nextval,'hello4'); select test_seq.currval from dual;
위와같은 방식으로 주어야한다.
select test_seq.currval from dual;
라고 줄경우에는
ORA-08002: sequence TEST_SEQ.CURRVAL is not yet defined in this session
라는 오류 메시지가 나오는것을 확인 할 수 있을것이다.
4. 삽입없이 최종(현재) 시퀀스값 조회
SELECT *
FROM USER_SEQUENCES
WHERE SEQUENCE_NAME = UPPER('시퀀스명')
select * from user_sequences where sequence_name=upper('test_seq');
라고 주면 다음과 같은 시퀀스 정보에 대해서 확인 할 수 있을 것이다.
LAST_NUMBER 컬럼이 현재 시퀀스 값을 의미 한다.
시퀀스 초기화 할시 현재 시퀀스를 DROP 하고 다시 생성을 해야 한다고 하더라...
물론 초기화(?) 는 가능하는데 일종의 꼼수라고 한다.
시간이 나면 이부분에 대해서 포스팅을 하도록 하겠음.
도움이 되셨다면 공감클릭! 궁금하신점은 댓글!!
Oracle - if ~ else 조건문 사용하기 : DECODE (0) | 2014.08.24 |
---|---|
오라클 - 널체크(NVL 사용하기) (0) | 2014.08.23 |
ORACLE 오라클 rownum을 이용하여 페이징 처리하기 (0) | 2014.08.15 |
오라클(Oracle) 데이터를 일괄로 다른테이블에 INSERT 하기 (INSERT INTO ... SELECT ... FROM ...) (2) | 2014.08.13 |
오라클 계층형 트리구조 쿼리 (재귀호출) - START WITH .. CONNECT BY PRIOR (0) | 2014.08.12 |
2014/08/11 - [DB/Oracle] - 오라클(Oracle) sequence 생성, 등록, 최종 시퀀스값 조회하기
2014/08/11 - [DB/MySQL] - MySQL 시퀀스 auto_increment 생성 및 초기화하기
1. MS-SQL 시퀀스 생성하기
CREATE TABLE test_board( seq INT NOT NULL identity(1,1) PRIMARY KEY, title VARCHAR(20) NOT NULL ); INSERT INTO test_board(title) VALUES('hello'); INSERT INTO test_board(title) VALUES('hello2'); INSERT INTO test_board(title) VALUES('hello3');
위와같이 실행 후 SELECT문으로 데이터 조회
해당 테이블 구조 및 데이터는
2014/08/11 - [DB/MySQL] - MySQL 시퀀스 auto_increment 생성 및 초기화하기
과 동일함
그럼 이제 모든 데이터를 지우고 다시 같은 insert 쿼리를 동작 후 SELECT문으로 조회를 해보도록
하자
이처럼 seq 컬럼에 데이터가 지워진 시퀀스 데이터에 이어져서 자동증가하는 것을 확인하였다.
시퀀스값을 깔끔하게 1부터 시작하기 원하는 경우가 존재한다.
다음을 이용하여 MS-SQL 시퀀스를 초기화 해보도록 하자
2. MS-SQL 시퀀스 초기화
시퀀스 초기화를 하고자 한다면 다음과 같은 명령어를 주도록 하자
DBCC CHECKIDENT('test_board', RESEED, 0)
위와같은 DBCC CHECKIDENT 함수(?) 실행후 'test_board' 에 초기화 하고자 하는 테이블을 정의 한 후 세번째 파라미터 값에 초기화 값을 지정해주도록 하자
정상적으로 초기화가 되는지 시나리오 작성을 해보도록 하겠음
1) 테이블의 data all delete
2) 시퀀스 초기화(DBCC CHECKIDENT('xxxxxx','RESEED',x))
3) insert문을 디용한 데이터 추가
4) select문을 통한 table data 확인
-- 1. 데이터 모두 삭제 DELETE FROM TEST_BOARD; -- 2. 시퀀스 초기화 DBCC CHECKIDENT('test_board', RESEED, 0) -- 3. INSERT문 실행 INSERT INTO test_board(title) VALUES('hello'); INSERT INTO test_board(title) VALUES('hello2'); INSERT INTO test_board(title) VALUES('hello3'); -- 4. SELECT문 조회 SELECT * FROM test_board
위와같이 정상적으로 seq 컬럼의 시퀀스가 초기화 되는것을 확인 할 수 있었다.
도움이 되셨다면 공감클릭! 궁금하신점은 댓글!!
MS-SQL - 널체크(ISNULL 사용하기) (0) | 2014.08.23 |
---|---|
MS-SQL 2005 이상 row_number() over(order by 정렬조건) 을 이용하여 페이징쿼리를 동작시켜보자 (0) | 2014.08.15 |
MS-SQL SELECT 쿼리로 다른 테이블로 INSERT (INSERT SELECT FROM , SELECT INTO FROM) (1) | 2014.08.13 |
MS-SQL 계층형 트리구조 쿼리 (재귀호출) - with ...(col 1, col 2 ...,col n) as ... union . (2) | 2014.08.12 |