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
묵시적 형변환 이네요
원칙상 값이 숫자이면 비교대상이 한글/영문이 될수없습니다.
DB에 들어가 있는 실제 값이 1개월이 아니라.
1인경우
mysql은 유연한 검색을 허용하기때문에 '1개월'의 '1'만 인식 하고 '개월'은 무시되긴합니다.
검색을 그렇게 해주더라도
실제로 그렇게 사용하지 않는게 효율적입니다.
즉, 효율이 떨어지는 현상이 발생합니다.
자동으로 형변환을 시켜서 문자열을 지워버리고
숫자에 해당되는 내용만 인식을 하거든요
처음만나는 글자가 숫자인경우만큼만 인식하고 문자를 발견하는순간 무시합니다.
숫자로만 인식하길원하시면 로직에서 Validation을 하시는게 더 좋겠죠
php상에서
Cast 처리하시면됩니다.
$var = "1개월";
$val = (int)$var;
과 같이 형변환하시거나
$val = intval($var);
함수를 사용하시거나
하셔서 DB조회시에 변수로 사용하시면됩니다.