아이디가 길어지니까 포인트가 안쌓여요
본문
http://sir.co.kr/g4_skin/150638?sca=%ED%9A%8C%EC%9B%90%EA%B0%80%EC%9E%85
에서 indie 님이 알려주신 방법으로 회원가입할때 아이디를 이메일주소를 받는 방식으로 바꿨습니다. 그런데 이메일 주소가 길어지면 이상하게 포인트(예: 회원가입시 1000포인트, 로그인시 100포인트)가 안쌓이는데 왜 그런건가요? 이메일주소가 20글자가 넘어갈때만 이런 문제가 생깁니다.
고수님들 답변 부탁드립니다.
답변 5
기본 스킨을 보시면 텍스트 필드에 길이를 20글자로 제한하는데
이유는 디비에 mb_id 필드 길이를 20글자로 잡았기 때문입니다.
회원가입시 20글자를 초과하더라도 진행이 되겠지만
디비에 추가할 때 초과한 길이는 잘라버립니다.
예를들면 필드 길이가 3일 때 "가나다라마" -> "가나다"
포인트 같은 경우는 20글자 초과한 아이디로 지급하려니
디비에 해당 아이디가 존재하지 않아 지급되지 않게 되죠.
로그인 세션 또한 20글자 초과한 아이디로 저장되어
실제로는 존재하지 않는 아이디라고 보시면 될 거 같습니다.
해결 방법은 디비에서 해당 필드의 길이를 수정하시면 됩니다.
아래는 mb_id 필드가 포함된 테이블 리스트 입니다.
g5_auth, g5_board_good, g5_board_new, g5_cert_history, g5_group_member, g5_login, g5_me ber, g5_memo, g5_point, g5_poll_etc, g5_scrap, g5_autosave, g5_qa_content
포인트 테이블의 mb_id 입력 최대가 varchar(20) 입니다.
영문 20자 넘으면 나머지는 짤리게 됩니다.
해당 컬럼의 값을 늘려주셔야 할것 같습니다.
g5_point 테이블입니다.
데이터베이스에서 테이블이란 데이터 집합이라 생각하시면 되고요.
자세한 내용은 관련 서적이나 블로그를 통해서 습득하시면 될 거 같습니다.
한참 지난 글이지만 혹시 지금도 같은 문제를 격을 분이 있을것 같아서 ...
mb_id의 컬럼 사이즈를 이메일 컬럼 사이즈와 동일하게 varchar 255로 전부 바꾸고 있었는데요. g5_point를 보니 인덱스가 걸려있어서 38인가? 까지만 늘릴수 있더군요. 이 값은 DB 설정값에 따라 다를겁니다. 원인은 4개의 컬럼을 묶어서 인덱스로 만든것때문인데요. 처음에는 mb_id를 mb_no로 바꿀려고 했습니다. 그런데 수정할 곳이 많더군요. 이 작업은 코어 개발자들에게 넘겨야 겠더군요. (왜? mb_no를 안쓰고 mb_id를 썼는지는 궁금합니다.) 암튼, 인덱스를 보니 4개의 컬럼을 묶어서 인덱스 걸었더군요. 그래서 mb_id, po_rel_table 컬럼만 인덱스로 걸었습니다. 쿼리 찾아보니 4개를 where에 사용해 count하는 쿼리가 있던데 그것때문에 인덱스를 만든것 같아 관련 컬럼 2개만 넣었습니다. 그랬더니 255까지 mb_id를 늘릴수 있네요.