sql 조회시 id 가 int형인경우 한글, 영문 처리는 어떻게 되나요??

sql 조회시 id 가 int형인경우 한글, 영문 처리는 어떻게 되나요??

QA

sql 조회시 id 가 int형인경우 한글, 영문 처리는 어떻게 되나요??

본문

auto_increment 하고 있는 int 형 primary key 가 있습니다.

 

test_table[index] 라고 가정하고 1개의 데이터가 있을때

 

select * from test_table where index = 1

select * from test_table where index = '1개월'

 

조회되는 쿼리의 결과값이 같아서 질문드려요

 

1개월 이라고 검색하니 해당하는 결과값이 없을거라 예상했는데 나와서 당혹스럽습니다

 

select * from test_table where index = '1개월'

위와 같이 검색할때 나오는 결과가 없도록 하려면 어떻게 해야할까요? 

 

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

join을 하려는데 외래키를 따로 열을 만들지 않고 content 내부에 저장되어서 (예: table 5020 order 5000) 

SUBSTRING_INDEX(SUBSTRING_INDEX(content, ' ', 2), ' ', -1) 이런식으로 index를 가져와 조인하려다 생긴 이슈입니다. ㅠㅠ

 

SELECT g5_point.*
     , SUBSTRING_INDEX(SUBSTRING_INDEX(po_content, ' ', 2), ' ', -1) as text
FROM g5_point
  left join test_table on index = SUBSTRING_INDEX(SUBSTRING_INDEX(po_content, ' ', 2), ' ', -1)

이 질문에 댓글 쓰기 :

답변 3

https://dev.mysql.com/doc/refman/8.0/en/type-conversion.html

보시면 이해가 될 겁니다.

원칙상  값이 숫자이면 비교대상이 한글/영문이 될수없습니다.

 

DB에 들어가 있는 실제 값이 1개월이 아니라.

1인경우

mysql은 유연한 검색을 허용하기때문에  '1개월'의 '1'만 인식 하고 '개월'은 무시되긴합니다.

 

검색을 그렇게 해주더라도

실제로 그렇게 사용하지 않는게 효율적입니다.

즉, 효율이 떨어지는 현상이 발생합니다.

자동으로 형변환을 시켜서 문자열을 지워버리고

숫자에 해당되는 내용만 인식을 하거든요

 

처음만나는 글자가 숫자인경우만큼만 인식하고 문자를 발견하는순간 무시합니다.

숫자로만 인식하길원하시면 로직에서 Validation을 하시는게 더 좋겠죠

 

php상에서 

Cast 처리하시면됩니다.

 

$var = "1개월";

$val = (int)$var;

과 같이 형변환하시거나

 

$val = intval($var);

함수를 사용하시거나

하셔서 DB조회시에 변수로 사용하시면됩니다.

 

답변감사합니다.
sql 내에서 join 을 할때 문제되는거라 ...
가장 좋은 방법은 데이터 열을 따로 관리해 외래키를 조인하면 좋겠지만, 수정되어야 할 부분이 많아져서 (예: table 5020 order 5000) 이런 문자열에서 추출한 뒤 조인을 해줘야 하는 상황입니다.

php 에서 충분히 가능한 일이지만 join이 필요한 이유는 where 절에서 join한 테이블의 name 검색을 해야하는 상황이 발생해서 그렇습니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 1,543
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT