code

SQL 비교가 WHERE에서 잘못된 결과를 반환합니다.

starcafe 2023. 8. 16. 22:29
반응형

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가 비어 있는 두 행의 테이블을 반환합니다.

그러고 나서 시도했습니다.

  1. LIKE 'a'
  2. LIKE '%a%'
  3. 그리고.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

반응형