mysql int bigint

Database/DB 2016.06.20 11:51

mysql을 사용하면서  몰랐던 정보들을 알아서 적어본다. 


int / bigint 에 관한 내용인데 


먼저 int / bigint 의 최대값은 unsigned 일 경우 각각 4억과 4천경이다(저만큼 넣을 데이터가 있는건가..)......


int는 4바이트(자릿수 10자리)


bigint는 8바이트로 (자릿수 20자리) 로 생각면 된다. 


자세한 사항은 공식 홈피 확인


https://dev.mysql.com/doc/refman/5.5/en/integer-types.html




두번째로 대부분 많은 분들이 테이블 선언시 int(4) 하면 4자리까지만 들어간다고 생각하실수도 있는데 (실은 내가 그랬다.)


만일 3자리 숫자 999 를 넣었다면 출력될때 0999 로 해당 4자리이하일때 앞에 0을 붙여서 내보낸다. (zerofill 옵션)


물론 저장할때엔 그냥 999로 저장함. 


그러니 테이블 생성할때 int(숫자)라면 단순히 zerofill 옵션이니 필요없다면 굳이 사용안해도 된다. (자릿수를 위한거라면 TINYINT / SMALLINT / MEDIUMINT 을 써야 옳다.)




저작자 표시
신고

WRITTEN BY
No.190
세계정복의 시작점

받은 트랙백이 없고 , 댓글이 없습니다.
secret


재미있는것을 발견( 지금까지 몰랐던것을 발견)!!



테이블간의 관계인 fk( Foreign Key Constraint) 가 설정되어 있을때 

fk 생성시 해당 칼럼을 not null 속성을 넣지 않았다. (이건 가능함)

헌데 not null  속성을 넣을려면


먼저 해당 fk 를 지운후 alter 로 notnull 속성을 넣어준후 다시 fk 속성을 넣어줘야 한다. 


여기까진 문제가 없다. 

이번엔 unsigned 속성을 넣어보려 한다. 

헌데  fk의 기본이 되는 pk 속성중에 unsigned 속성이 없다면 어떻게 되느냐?!


아까와 같이 

"먼저 해당 fk 를 지운후 alter 로 unsigned 속성을 넣어준후 다시 fk 속성을 넣어줘야 한다. "

에서 unsigned 속성을 넣은후 다시 fk 속성을 넣을 때 에러가 발생한다!!!

왜냐하면 fk의 pk의 속성엔 unsigned 속성이 없으니까!!

문제는 이때 fk는 지워졌지만 unsigned 속성은 정상적으로 들어가 있다. (fk 주기 전에 속성을 변경했으므로)


그래서 "어라?! 에러가 났는데 잘 되어 있네?!" 라고 생각하도 진행하다가 fk가 없어진거 발견.

헌데 fk를 넣을려고 하면 그냥 해당 FK넣을수 있는 칸이 생성되질 않는다. (mysql workbench 시)

이게 뭐야.. 하면서 몇시간을 허비.. 


이래서 IDE자동화가 무서운 겁니다. 

오늘의 교훈!! IDE를 너무 믿진 마세요!!



- 아마 콘솔로 작업했으면 에러 메시지 보고 바로 해결했을 경우이다. 




저작자 표시
신고

WRITTEN BY
No.190
세계정복의 시작점

받은 트랙백이 없고 , 댓글이 없습니다.
secret



만일 mysql 이 설치가 되었고 ps -ef | grep mysql 현 상태에서 서비스가 실행중이라면 

실행하고 다시 접속하면 정상적으로 실행된다. 

<pre class="brush:javascript">

mysqld_safe --user=root &

</pre>



저작자 표시
신고

WRITTEN BY
No.190
세계정복의 시작점

받은 트랙백이 없고 , 댓글이 없습니다.
secret

두개의 테이블에서 각각 한개의 칼럼을 비교하여 없는것을 찾는 조인이 부정형 조인 / 안티 조인이라 한다.


 두개의 테이블 A , B 가 아래와 같이 있다고 하자.                 

만일  A not in (B) 를 한다면 결과 값은 bbb 가 나오게 된다.

만일 B not in (A) 가 된다면? 아래의 그림처럼 ccc, ddd 가 나오게 된다.





소스는 심플하다.



select 

distinct a.id , a.name

from A a

where 

 a.id is not null

 and a.id not in (select /*+ HASH_AJ*/  id  from B  where id is not null)


 - 오라클 11g부터는 not null을 명시 하지 않아도 된다. 그전 버전을 사용한다면 꼭 not null을 넣어주기 바랍니다.(결과값이 달라집니다.)

- 실행계획은 강제적으로 /*+ HASH_AJ*/ 을 넣었습니다. 명시 하지 않으면 다르게 실행될 가능성이 있습니다.




저작자 표시
신고

WRITTEN BY
No.190
세계정복의 시작점

받은 트랙백이 없고 , 댓글이 없습니다.
secret

toad 결과의 한글이 깨진게 아닙니다. sql 쿼리 날릴때 한글이 갑자기 않보입니다.(결과가 깨진게 아닙니다.)

근데 쿼리는 정상적으로 돌아갑니다. 않보이는 곳 복사하여 메모장에서 보니 정상적입니다.


문제의 화면입니다.


-_- 무슨 이유인지는 모르겠지만 갑자기 토드의 폰트가 바뀌었습니다.

해당 폰트에서는 한글이 먹히지 않는 폰트였구요.(쿼리 치다가 갑자기 바뀌어서 무슨일인가 했습니다.)

토드에서 폰트를 변경하는 방법은 다음과 같습니다.


1) 메뉴바에서 View->Toad Options 로 들어갑니다.

2) Editor -> Languages 부분의 Edit 로 들어갑니다.


3) Highlighting -> Custom font 로 들어갑니다. 


4) 이제 원하는 폰트로 바꾸시면 됩니다.




이제 쿼리문의 한글도 정상적으로 보입니다.


단축키로 폰트가 바뀌지는 않을텐데.. 이 부분은 의문입니다.

저의 경우는 포토샵때문에 많은 폰트가 지정되어 있어서 포토샵할때는 별문제가 없었지만

토드에서 이런경우가 발생하니 처음엔 꽤나 당황스러웠습니다.


저작자 표시
신고

WRITTEN BY
No.190
세계정복의 시작점

받은 트랙백이 없고 , 댓글  6개가 달렸습니다.
  1. 좋은정보 감사합니다.^^
    제가 사용하는 툴은 아니지만 한번 사용해 봐야 겟어요.^^
    여기 오늘날씨는 무쟈게 덥답니다.
    건강조심하시고 즐거운 하루 되세요.
  2. sql게이트 쓰시나요?ㅎ
    여러 DB프로그램쓰다가.. 역시 토드만한게 없더라고요;ㅎ
    이제 여름시작이네요~ 초보플밍님도 몸건강하세요!
  3. 굿입니다 감사합니다.
  4. 깃헙 정리하신것 검색타고 들렀습니다.
    개발자인데, 블로그를 잘 지으셨네요. 부럽.

    좋은 내용(개발외것도) 잘 둘러보고 갑니다.

    어쩜 종종 들릴지도.(그래봤자 티스토어 계정이 없어서 눈팅이 될듯.)
secret


제목 그대로 입니다.

DBlink 시키느라고 뻘짓을 하루동안이나 했는데.

기쁨의 환희에 젖어 select 날리는 순간.

(테이블과 사용자는 보안상 지웠습니다.)


"ora-22992 오류 lob 위치를 알수없다!"

물론 해당 테이블을 로컬 DB에 똑같이 생성해주면 되지만. 그건 말도 안되는 일.

하필 가장 중요한 칼럼이 clob로 되어 있다.ㅜㅡㅜ 

해당 테이블을 view로 만들어서 보는 방법도 있다고 한다. 링크 참조 : oracleclub

뭐... 해당 DBA와 상의해서 DB서버에  다이렉트로 붙기로 합의;ㅋ

(물론 다이렉트로 붙으면 안된다는것은 모든 서버사이드 개발자와 DBA가  아는 기본상식; )




저작자 표시
신고

WRITTEN BY
No.190
세계정복의 시작점

받은 트랙백이 없고 , 댓글이 없습니다.
secret


잘되던 웹싸이트가 가끔씩 에러를 뿜어낸단다. 설마해서 계속 클릭해봤더니 위와 같이 에러가 나왔다.
에러 내용도 상당히 희한한데 . 어떻게 고쳐야 할지도 막막한 상황.

구굴링을 해보면 DB LINK 설정이 잘못되어 있거나 Oracle8 버전이하에서의 버그라고만 씌어져 있다.

DBLINK 는 내가 손볼곳이 아니라서 잘모르겠고, 오라클도 10버전이라서 난감해하고 있었는데

JDBC 의 버전이 맞지 않아서 생기는 경우도 있다고 한다.

JDBC가 하위버전일 경우에 나오는 버그로 세션이 제대로 끝기지 않는다고 한다.


결국 odbc.jar 파일을 최신 파일로 교체해주니 아직까진 에러가 나오진 않았다.(4일정도 됐음.)

혹시나 하는 분들은 최신 odbc 파일로 파꿔보시길. 
저작자 표시
신고

WRITTEN BY
No.190
세계정복의 시작점

받은 트랙백이 없고 , 댓글이 없습니다.
secret


ibatis를 하는데 에러가 그냥 뿜어져 나온다.

Cannot read response from server. Expected to read 4 bytes.. 라고 뜬다면 일단 설정 파일을 의심할것!

context.xml 이나 ibatis경우엔 db.properties 의 파일의 속성들을 유심히 볼것!!

사용자명, 비번, mysql이 있는 주소까지 꼼꼼하게 따져보기 바란다.(대소문자 당연히 구분함)

-_-나의 경우엔 포트 번호를 8080으로 설정해놓고 안된다고 징징거렸다...ㅋㅋ

mysql의 경우 포트는 3306 번임을 명심! 또 명심!! 
저작자 표시
신고

WRITTEN BY
No.190
세계정복의 시작점

받은 트랙백이 없고 , 댓글이 없습니다.
secret
mysql 에서 유저 생성시 아래의 에러 메시지가 나온다면 생성하는 칼럼이 누락되어 나온 현상이다.

 Field 'ssl_cipher' doesn't have a default value


 Field  'x509_issuer'  doesn't have a default value 


 Field  ' x509_subject'  doesn't have a default value  

 
ssl_cipher / ssl 보안 관련 칼럼
x509_issuer , x509_subject / 암호화 관련 칼럼
위의 세가지 칼럼은 mysql의 버전이 업이 되면서 보안에 대한 인식으로 인해서 새롭게 생겨났다.

3개의 에러를 같이 쓴 이유는 유저 생성시 위의 3개중 칼럼이 하나라도 빠지면 나는 에러이다.
결국엔 세개의 칼럼을 추가 해줘야 한다. (물론 null값으로 )


insert into user(host,user,password,ssl_cipher,x509_issuer,x509_subject)
values('%','username',password,'','','');
 

위와 같이 넣어주면 정상적으로 들어간다.


 
저작자 표시
신고

WRITTEN BY
No.190
세계정복의 시작점

받은 트랙백이 없고 , 댓글이 없습니다.
secret


에러메시지가 잘 보이지 않아서 다시 씁니다.

ORA-01841: (full) year must be between -4713 and +9999, and not be 0

년에는 -4713~9999 사이의 숫자, 0은 안됨. 

-_- 뭐 이런 신기한 에러가..ㅎ 
나의 쿼리의 문제점은 ''공백이 아니라 space 를 하나 넣었다. ' ' <-요렇게
공백 없음으로 고치고 돌리니 바로 해결!


저작자 표시
신고

WRITTEN BY
No.190
세계정복의 시작점

받은 트랙백이 없고 , 댓글이 없습니다.
secret


에러메시지가 잘 보이지 않아서 다시 씁니다.

ORA-01841: (full) year must be between -4713 and +9999, and not be 0

년에는 -4713~9999 사이의 숫자, 0은 안됨. 

-_- 뭐 이런 신기한 에러가..ㅎ 
나의 쿼리의 문제점은 ''공백이 아니라 space 를 하나 넣었다. ' ' <-요렇게
공백 없음으로 고치고 돌리니 바로 해결!


저작자 표시
신고

WRITTEN BY
No.190
세계정복의 시작점

받은 트랙백이 없고 , 댓글이 없습니다.
secret