programing

mysql은 문자열 'now()'를 datetime으로 취급합니까?

randomtip 2022. 9. 23. 21:24
반응형

mysql은 문자열 'now()'를 datetime으로 취급합니까?

함수 'now()'를 문자열로 포함하도록 잘못 구성된 쿼리가 있습니다.

 select Listing.id,Listing.reactivated FROM `listings` AS Listing  WHERE Listing.reactivated < 'now()';

그러나 실제로는 이 쿼리는 mysql 5.5에서 올바른 결과를 반환할 수 있습니다.

|  26662 | 2007-06-04 21:42:51 |
|  26663 | 2007-06-04 21:46:34 |

실제로 'now'나 'curdate'와 같이 괄호가 없어도 여러 날짜 함수가 작동하지만 단순하게 'select 'now'();는 문자열을 반환합니다.

실제로 Mysql을 MariaDB 10.1로 업그레이드 했을 때 이 사실을 알게 되었습니다.Mysql은 동작을 정지하고 위 쿼리의 결과는 null 집합이며 경고입니다.

| Warning | 1292 | Incorrect datetime value: 'NOW()' |

쿼리를 수정해야 한다는 것은 알고 있습니다만, 이 배경, 변경 시기, 동작 설정 가능 여부 등을 묻고 싶습니다.

따옴표 사용 안 함:'NOW()'간단히 말하면NOW().

전자는 유효한 날짜/시간이 아닌 문자열입니다.(도 마찬가지입니다.'NOW'그리고.'XYZ'.)

표현식 평가 클레임의 유형 변환 문서:

인수 중 하나가 다음과 같은 경우TIMESTAMP또는DATETIME컬럼과 다른 인수는 상수입니다.상수는 비교를 수행하기 전에 타임스탬프로 변환됩니다.

하지만 이 경우에는 그런 일이 일어나지 않는 것 같기 때문에 버그일 수도 있습니다.이 장치가 이 모든 것을DATETIME스트링과 비교해서 상수와 비교합니다.따라서 현재 날짜/시간이2016-07-19 15:13:06다음과 같은 결과를 얻을 수 있습니다.

SELECT '2016-07-19 15:13:06' < 'now()';

조합 시퀀스의 문자보다 숫자가 작기 때문에 이 값은 반환됩니다.1.

나는 다른 현을 시험해 보고 이 결론에 도달했다.

SELECT NOW() < '300';

이것도 반환됩니다.1. 단, 다음과 같이 변경할 경우:

SELECT NOW() < '100', NOW() < '!';

결과는0.

언급URL : https://stackoverflow.com/questions/38466893/mysql-treats-the-string-now-as-datetime

반응형