U+200B의 문자가 들어있는 컬럼을 조회하는방법


1. HEX값 조회

유니코드값을 구글에 조회하면 hex값은 쉽게얻을수있음.

U+200B의 HEX값은 'e2808b' 이다.


2. 조회

SELECT mail_user_seq, common_stat_seq, common_stat_content 

FROM wcf_common_stat 

WHERE mail_user_seq='166' AND common_stat_content like concat("%", UNHEX('e2808b'), "%");


3. replace하기전 테스트 쿼리(해당유니코드문자를 [[[200B]]]로 표기하여 조회)

SELECT mail_user_seq, common_stat_seq, REPLACE(common_stat_content, UNHEX('e2808b'), '[[[200B]]]') 

FROM wcf_common_stat 

WHERE mail_user_seq='166' AND common_stat_content like concat("%", UNHEX('e2808b'), "%");


4. replace

UPDATE wcf_common_stat 

SET common_stat_content=REPLACE(common_stat_content, UNHEX('e2808b'), '') 

WHERE mail_user_seq='166' AND common_stat_content like concat("%", UNHEX('e2808b'), "%");




끝.





* 테이블스페이스 조회

SQL> select tablespace_name from dba_tablespaces;


* 테이블스페이스 생성

SQL> create tablespace luuaz_tabspace

  2  datafile 'luuaz_tabspace.dat'

  3  size 10M autoextend on;


* 사용자 생성

SQL> create user luuaz

  2  identified by 1234

  3  default tablespace luuaz_tabspace


* 사용자에게 권한부여

SQL> GRANT connect, resource TO luuaz;

SQL> GRANT unlimited tablespace TO luuaz;


* 접속확인

# sqlplus luuaz/1234@XE
















(업무참고)


여러개의 체크박스를 폼으로 태워서 처리후 SQL IN문에 넣는방법


* Model

String[] chk = null;


public String[] getChk() {
return chk;
}

public void setChk(String[] chk) {
this.chk = chk;
}


* Controller

vo.setChk(dbInfoModel.getChk());



* iBatis

<dynamic>
<isNotEmpty property="chk" prepend="AND">
DBSEQ IN
    <iterate property="chk" open="(" close=")" conjunction=",">
    #chk[]#
    </iterate>
    </isNotEmpty>
</dynamic>



'업무 > DB' 카테고리의 다른 글

[mysql] unicode문자 쿼리 및 치환  (1) 2016.03.21
[oracle] 계정생성 및 기타쿼리  (0) 2016.01.12
[iBatis] update문 prepend작성법  (0) 2015.11.26
[mysql] 한글이 물음표로 나올때.  (1) 2015.04.09
mysql 초기설정하기  (0) 2015.02.01
<update id="osAddressDAO.updateAddrGrpMapping" parameterClass="osAddressMap">
UPDATE OS_ADDR_GROUP_MAPPING SET
<dynamic prepend=" " close=" ">
<isNotNull property="new_addr_seq" prepend=",">
ADDR_SEQ = #new_addr_seq#
</isNotNull>
<isNotNull property="new_group_seq" prepend=",">
GROUP_SEQ = #new_group_seq#
</isNotNull>
WHERE
1=1
<isNotEmpty property="addr_seqs" prepend="AND">
ADDR_SEQ IN ($addr_seqs$)
</isNotEmpty>
<isNotEqual property="addr_seq" compareValue="0" prepend="AND">
ADDR_SEQ = #addr_seq#
</isNotEqual>
<isNotEmpty property="group_seq" prepend="AND">
GROUP_SEQ = #group_seq#
</isNotEmpty>
</dynamic>
</update>


 위 dynamic문을 안쓰면 

UPDATE OS_ADDR_GROUP_MAPPING SET ,ADDR_SEQ ~~~ 로 컴마가앞에들어가서 오류가 발생한다.



끝.



* 문제점.

위와같이 한글이 물음표로 출력된다.


물음표로 출력되었을때 mysql설정은 아래와 같다.

+--------------------------+----------------------------+

| Variable_name            | Value                      |

+--------------------------+----------------------------+

| character_set_client     | latin1                     |

| character_set_connection | latin1                     |

| character_set_database   | utf8                       |

| character_set_filesystem | binary                     |

| character_set_results    | latin1                     |

| character_set_server     | utf8                       |

| character_set_system     | utf8                       |

| character_sets_dir       | /usr/share/mysql/charsets/ |

| collation_connection     | latin1_swedish_ci          |

| collation_database       | utf8_general_ci            |

| collation_server         | utf8_general_ci            |

| completion_type          | 0                          |

| concurrent_insert        | 1                          |

| connect_timeout          | 10                         |

+--------------------------+----------------------------+




* 해결방법

/etc/my.cnf 를 수정하여 CharacterSet을 설정한다.

[client]

..

..

default-character-set = utf8



[mysqld]

..

..

init_connect = SET collation_connection = utf8_general_ci

init_connect = SET NAMES utf8

character-set-server = utf8

collation-server = utf8_general_ci



[mysqldump]

..

..

default-character-set = utf8



[mysql]

..

..

default-character-set = utf8



수정후 mysqld 재시작

# service mysqld restart




* 확인방법


mysql로그인후

mysql> show variables like 'c%';

+--------------------------+----------------------------+

| Variable_name            | Value                      |

+--------------------------+----------------------------+

| character_set_client     | utf8                       |

| character_set_connection | utf8                       |

| character_set_database   | utf8                       |

| character_set_filesystem | binary                     |

| character_set_results    | utf8                       |

| character_set_server     | utf8                       |

| character_set_system     | utf8                       |

| character_sets_dir       | /usr/share/mysql/charsets/ |

| collation_connection     | utf8_general_ci            |

| collation_database       | utf8_general_ci            |

| collation_server         | utf8_general_ci            |

| completion_type          | 0                          |

| concurrent_insert        | 1                          |

| connect_timeout          | 10                         |

+--------------------------+----------------------------+


캐릭셋을 UTF-8로 설정후 한글이 잘출력됨을 확인한다.


끝.




* 초기 root 암호 설정하기.

  - mysqladmin으로 하는 방법

$ mysqladmin -u root -p 


  - update문을 이용

$ mysql -u root 


mysql> use mysql;

mysql> update user set password=password('새로운패스워드') where user='root';

mysql> flush privileges;

mysql> quit;



* 계정 관리

* 계정 생성

mysql> create user 생성아이디@localhost identified by '새비밀번호';

mysql> create user 생성아이디@'%' identified by '새비밀번호';


* 계정 삭제

drop user 삭제할아이디@localhost;

drop user 삭제할아이디@'%';


* 데이터베이스 관리

* DB생성

mysql> create database 새로운데이터베이스명;

mysql> create schema 디비명 default character set utf8;


* DB삭제

mysql> drop database DB이름;



* 계정에 DB권한부여

mysql> GRANT ALL PRIVILEGES ON 데이터베이스이름.* TO 계정아이디@localhost identified by '계정비밀번호';

mysql> GRANT ALL PRIVILEGES ON 데이터베이스이름.* TO 계정아이디@'%' identified by '계정비밀번호';


모든권한부여

GRANT ALL PRIVILEGES ON *.* TO 계정아이디@'%' WITH GRANT OPTION; (IP예: '192.168.1.%')







SELECT a.EMAIL

    FROM VM_OUT_SAWON a

    WHERE NOT EXISTS(SELECT email FROM VM_SAWON b WHERE a.email=b.email)


VM_OUT_SAWON테이블의 EMAIL값이  VM_SAWON테이블에 존재하지않을경우만 SELECT한다. (중복불허)


특정자리수로 특정값을 채우고싶을때 쓰는 함수



LPAD/RPAD(대상값 또는 컬럼, 대상값을 포함하여 채울크기, 채울값)


* 왼쪽에 채우기

예) SELECT LPAD('777',10,'0') as FIELD FROM 테이블명;

     결과값: 0000000777


* 오른쪽에 채우기

예) SELECT RPAD('777',10,'0') as FIELD FROM 테이블명;

     결과값: 7770000000

mysql -e 'SELECT * FROM 테이블명' -uDBID -pDBPASS DB_NAME > out.txt


굿

select seq_user,count(*) from tmem_addrbook group by seq_user having count(*) > 2;

테이블이 많을때 비정상적으로 출력이 되어


mysql 오류를 보면...;

Can't find file: './CrediMail/tb_webhard554_hits.frm' (errno: 24)

.....

라고 출력되고, 에러를 토함.


해결방법

my.cnf 파일에

open_files_limit = 4096


추가후

mysql을 재기동하여 확인한다.

mysql> show variables like 'open_files%';

+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| open_files_limit | 4096  |
+------------------+-------+


끝.

-------------------------------------------------------------------

근데 이렇게 쉽게 변경되어있지 않고 1024로 박혀있는 경우가있다.

그럴경우 다시 mysql 에러로그를 보면

[Warning] Could not increase number of max_open_files to more than 1024 (request: 4096)

라는 에러가 나온다.


이러면 시스템상에서 제한을 풀어주어야 한다.

# ulimit -a |grep open  을 해보면

open files                      (-n) 1024  로 되어있음.


root계정으로 들어간후

# vi /etc/security/limits.conf

을 열어서


....

web(계정명)        soft    nofile           4096

web(계정명)        hard    nofile           4096

....


추가하고 리눅스 재기동!


mysql 에 접속하여 다시 확인해보면 제대로 되어있음.

그래도 에러가난다면 리밋을 더 올림.


끝.







'업무 > DB' 카테고리의 다른 글

[mysql] 커맨드에서 쿼리날리기  (0) 2012.11.19
[db] 중복된 값 찾기  (0) 2012.09.21
[mysql] 개발DB만들기  (0) 2012.08.21
[mysql] sql덤프받기(특정조건, 문자셋지정해서)  (0) 2012.08.20
[oracle] 테이블 복사하기  (0) 2012.05.31



개발디비 만들기


1. 권한주기

insert into db values('localhost','CrediMail_dev','mobigen','y','y','y','y','y','y','y','y','y','y','y','y','y','y','y','y','y');


2. 권한 flush 

flush privileges;


3. DB복사

cp -a mail mail_dev


끝.




mysqldump -tn --skip-opt --default-character-set=euckr -uuserid -puserpass DBNAME userfile --where="email='condtion_value'"


'업무 > DB' 카테고리의 다른 글

[mysql] open_files_limit늘리기(Cant' open file "errno: 24")  (0) 2012.09.05
[mysql] 개발DB만들기  (0) 2012.08.21
[oracle] 테이블 복사하기  (0) 2012.05.31
[oracle] DB 테이블 이름 변경  (0) 2012.05.31
[oracle] 시퀀스 조작하기.  (0) 2012.05.09

테이블을 복사하는 방법.

아래예는 JWUSER 테이블에서 JWUSER_NEW로 복사한후

기존JWUSER는 JWUSER_OLD,  카피한 테이블 JWUSER_NEW는 다시 JWUSER로 바까치기하는 예임.

제품의 버전업시 테이블 데이터타입이 변경되었을시 깔끔하게 바꿔치기하는데 쓰임. 


1. 테이블을 만듬

CREATE TABLE JWUSER_NEW

(

  SEQ_USER         NUMBER(19),

  USERID           VARCHAR2(60 BYTE),

  USERDOMAIN       VARCHAR2(100 BYTE),

  ....

  ....

  ....

  CONSTRAINT JWUSER_NEW_PK PRIMARY KEY (seq_user)

);


2. 복사함. ( jwuser-> jwuser_new로 복사)

INSERT INTO jwuser_new(SEQ_USER, USERID, USERDOMAIN, ....) SELECT * FROM jwuser;


3. 기타부가적으로 변경 (테이블변경)

-- 기존JWUSER -> JWUSER_OLD 로 변경

ALTER TABLE JWUSER RENAME CONSTRAINT JWUSER_PK to JWUSER_OLD_PK;

ALTER TABLE JWUSER RENAME TO JWUSER_OLD;


-- 신규테이블 JWUSER_NEW -> JWUSER 로 변경

ALTER TABLE JWUSER_NEW RENAME CONSTRAINT JWUSER_NEW_PK to JWUSER_PK;

ALTER TABLE JWUSER_NEW RENAME TO JWUSER;



4. 부가잡다구리정보 : CONSTRAINT NAME 조회

SQL> SELECT TABLE_NAME, CONSTRAINT_NAME FROM USER_CONSTRAINTS WHERE TABLE_NAME IN('JWUSER');


TABLE_NAME                            CONSTRAINT_NAME

------------------------------ ------------------------------

JWUSER                                    JWUSER_PK



'업무 > DB' 카테고리의 다른 글

[mysql] 개발DB만들기  (0) 2012.08.21
[mysql] sql덤프받기(특정조건, 문자셋지정해서)  (0) 2012.08.20
[oracle] DB 테이블 이름 변경  (0) 2012.05.31
[oracle] 시퀀스 조작하기.  (0) 2012.05.09
[oracle] 날짜 집어넣기  (0) 2012.04.10

초간단


ALTER TABLE tuser_temp RENAME TO tuser;



기존 시퀀스를 초기화하고 새로 등록할때 쓰는 것임.


* 시퀀스 조회하기

select * from user_sequences;


* 시퀀스 지우기

drop sequence SEQ_이름;


* 새로운 시퀀스로 초기화

CREATE SEQUENCE SEQ_이름 START WITH 새로운값;



수고하세요~

'업무 > DB' 카테고리의 다른 글

[oracle] 테이블 복사하기  (0) 2012.05.31
[oracle] DB 테이블 이름 변경  (0) 2012.05.31
[oracle] 날짜 집어넣기  (0) 2012.04.10
[mysql] auto_increment 자동증가값 초기화  (0) 2012.04.04
[mysql] 파일에있는 SQL문 실행  (0) 2012.01.31


INSERT INTO userfile(file_seq, fdate, filehosts)  VALUES('46', to_date('2011-07-15 08:26:54','YYYY-MM-DD HH24:MI:SS'), 'localhost');


 to_date('15/07/05 12','DD/MM/RR HH')





히히히히ㅣㅎ

alter table 테이블명 auto_increment=1;



mysql> source 파일명


ㅇㅖ)  mysql> source addr_book.sql


pgsql이  /usr/local/pgsql  에 깔려있다면



# pg_ctl reload -D /usr/local/pgsql/data


select DATE_FORMAT(date_header,'%a, %d %b %Y %T +0900') from table_name;


이렇게 하면

Tue, 04 Oct 2011 16:50:00 +0900


요렇게 출력된다.

eml파일의 헤더에 넣기위해...!! 


Date: Tue, 04 Oct 2011 16:50:00 +0900

정의된 시퀀스 조회

select * from user_sequences


현재 시퀀스 조회

select 시퀀스네임.currval from dual


다음 시퀀스 조회

select 시퀀스네임.nextval from dual

+ Recent posts