2012-08-31 2 views
0

mysql에 문제가있다. 하나의 테이블을 만들고, 일부 데이터를 삽입하고, 쿼리하고, 데이터를 변경 한 다음 다시 쿼리 할 다음 스크립트를 참조하십시오. mysql이 regexp와 함께 미친다

이 스크립트를 고려 :

#Create the table 
DROP TABLE IF EXISTS T; 

CREATE TABLE `T` (
    `id` BIGINT(20) UNSIGNED NOT NULL, 
    `x` VARCHAR(50) COLLATE utf8_bin DEFAULT NULL, 
    `y` VARCHAR(15) COLLATE utf8_bin DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    KEY `d6fe1d0be6347b8ef2427fa629c04485` (`x`), 
    KEY `ee16755af8c89d0c26540daf7a0fe1b3` (`y`) 
) ENGINE=MYISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin; 

#Add two lines 
INSERT INTO T VALUES (1,'login','read'), (3,'','read'); 

#Query 1: expected 1 line, got 1 line 
SELECT * FROM T WHERE 
`y` = 'read' AND 
(
     ('login' = '' AND `x` = '') OR 
     (`x` != '' && 'login' REGEXP `x`) 
); 

#Query 2: expected 1 line, got 2 line 
SELECT * FROM T WHERE 
`y` = 'read' AND 
(
     ('login' = '' AND `x` = '') OR 
     ('login' REGEXP `x`) 
); 

#Invert field x 
UPDATE T SET `x` = '' WHERE id = 1; 
UPDATE T SET `x` = 'login' WHERE id = 3; 

#Another time, Query 1: expected 1 line, got 1 line 
SELECT * FROM T WHERE 
`y` = 'read' AND 
(
     ('login' = '' AND `x` = '') OR 
     (`x` != '' && 'login' REGEXP `x`) 
); 

#Another time, Query 2: expected 1 line, got 1 line 
SELECT * FROM T WHERE 
`y` = 'read' AND 
(
     ('login' = '' AND `x` = '') OR 
     ('login' REGEXP `x`) 
); 

그것은 출력 :

id  x  y 
1  login read 

id  x  y 
1  login read 
3    read 

id  x  y 
3  login read 

id  x  y 
3  login read 

나는 이것이 버그라고 생각합니다.

답변