2009년 1월 5일 월요일

MySQL통신프로토콜 - 인증시의 패킷5

Error Packet
Error Packet이라는 것은 처리가 실패했다라는 것을 서버에서 클라이언트에 통지하는 것이다. 
인증시 실패했을 경우 이외에 SQL구문에러가 된 경우에도 송신된다. 
에러 코드, SQL State코드, 에러 메세지가 포함되어 있다. 

클라이언트는 패킷헤더의 뒤쪽 선두 1바이트가 0xff인지 아닌지 확인하는 것으로 Error Packet인지 판단가능하다. 

Error Packet
패킷헤더 : 4바이트
필드수  : 1바이트 , oxff로 고정
MySQL에러코드: 2바이트,  MySQL고유의 에러코드, 16진수표기
sql state marker: 1바이트, 항상 0x23(#)
sqlstate의 값: 5바이트, 문자열표기(1자리당 1바이트에 대응)
에러메세지: n바이트, 에러메세지본체.  0x00로 끝나지 않음(패킷헤더가 있기 때문에 사이즈확인가능)
  ex>Access denied for user 'user1'@'localhost' (using password: YES)
  41 63 63 65 73 73 20 
  64 65 6e 69 65 64 20 
  66 6f 72 20 
  75 73 65 72 20
  27 75 73 65 72 31 27 
  40 27 6c 6f 63 61 6c 68 6f 73 74 27 20
  28 75 73 69 6e 67 20
  70 61 73 73 77 6f 72 64 3a 20
  59 45 53 29