반응형
SQL 비교가 WHERE에서 잘못된 결과를 반환합니다.
저는 cPanel에서 MariaDB를 사용하고 있습니다.나는 몇 개의 테이블과 몇 개의 뷰가 있는 DB를 가지고 있습니다.
라고 하는 견해가 있다고 가정해 보겠습니다.v_1
.네가 만약SELECT * FROM v_1
두 개의 열을 반환합니다(cell_a
그리고.cell_b
):
-------------------------
| cell_a | cell_b |
>>>>>>>>>>><<<<<<<<<<<<<<
-------------------------
| hello | a |
-------------------------
| good | NULL |
-------------------------
| bye | NULL |
-------------------------
| word | b |
-------------------------
의 유형cell_a
이라char
그리고cell_b
이라varchar(1)
.
그런 다음 간단한 문을 사용하여 뷰에서 데이터를 가져오려고 합니다.
SELECT * FROM view_name WHERE cell_b = 'a';
그러나 빈 응답을 반환합니다.
내가 시도하는 경우:
SELECT LENGTH(cell_b) as len FROM view_name;
다음과 같이 응답합니다.
------
| len |
=======
| 1 |
-------
| 0 |
-------
| 0 |
-------
| 1 |
-------
어느 쪽이 맞습니까?
좋아요, 그럼 시도해 보겠습니다.
SELECT * FROM v_1 WHERE LENGTH(cell_b) = 1;
그리고 빈 응답을 다시 받습니다.
하지만 내가 노력한다면,
SELECT * FROM v_1 WHERE LENGTH(cell_b) = 0;
cell_b가 비어 있는 두 행의 테이블을 반환합니다.
그러고 나서 시도했습니다.
LIKE 'a'
LIKE '%a%'
- 그리고.
REGEXP 'a'
그리고 이것은 오직 효과가 있습니다.
업데이트 1: 모든 테이블의 모든 인덱스를 제거하고 다시 만들었습니다.그런 다음 테이블을 다시 만들었습니다.
CREATE TABLE table_new LIKE table;
INSERT INTO table_new SELECT * FROM table;
RENAME TABLE table TO crushed_table;
RENAME TABLE table_new TO table;
ANALYZE TABLE table;
그리고 그것도 작동하지 않았습니다.
업데이트 2: 테이블을 복구하려고 했습니다.
시도:
ALTER TABLE my_table CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_mysql500_ci;
데이터를 가져올 수 없는 이유를 찾을 수 있도록 도와주십시오.SELECT * FROM v_1 WHERE cell_b = 'a'
?
잘 부탁드립니다.
언급URL : https://stackoverflow.com/questions/72309768/sql-comparison-returns-wrong-result-in-where
반응형
'code' 카테고리의 다른 글
정수에서 문자열로 변환하려면 어떻게 해야 합니까? (0) | 2023.08.16 |
---|---|
로컬 호스트에서만 Fiddler 사용 (0) | 2023.08.16 |
PowerShell을 사용하여 파일 및 디렉터리 목록 생성 (0) | 2023.08.11 |
Javascript 파일을 동적으로 로드하기 위한 JQuery (0) | 2023.08.11 |
Xcode 5 - DVTPlugInCompatibility에 필요한 플러그인이 없음UUID? (0) | 2023.08.11 |