2016-12-15 3 views
4

У меня есть два различных среды разработки, которая является MySQL 5.6 & Maria DB 10,0разница Maria DB/MySQL на сравнении TimeStamp

Я использую WHERE запроса, как time>="userInputBeginTime" ограничить минимальную дату данных.

К сожалению, передняя сторона не указала неверную информацию о дате (в моем случае ожидаемый ввод - это строка даты, отформатированная как «yyyy-MM-dd», но реальный вход был «Недействительная дата», которая из-за ошибки javascript)

И тогда я нашел разницу между MySQL & Maria DB

в MySQL:

SELECT NOW() > "Invalid Date" test; 
+-----------+ 
|  test | 
+-----------+ 
|   0 | 
+-----------+ 

в Maria DB:

SELECT NOW() > "Invalid Date" test; 
+-----------+ 
|  test | 
+-----------+ 
|   1 | 
+-----------+ 

Это различие напрямую связано с тем, что MySQL ничего не вернул, и Мария БД вернула все.

Я думаю, может быть, они используют различные методы для сравнения

Моя временное решение использует SQL как этот

SELECT * FROM table_name 
WHERE 
    NOT ISNULL(CONVERT("userInputBeginTime",datetime)) 
    AND time >= "userInputBeginTime" 

, чтобы заставить Maria DB возвращения ничего, когда неверный ввод был обнаружен.

Я хотел бы знать, есть ли лучшее решение?

С наилучшими пожеланиями

+0

'SELECT @@ sql_mode;' на обоих серверах. Соответствуют ли значения? –

+0

Привет, спасибо. @ Michael-sqlbot Оба они возвращаются + ------------ + | @@ sql_mode | + ------------ + | | + ------------ + Оба они установлены с использованием конфигурации по умолчанию –

ответ

0

Вы можете попробовать использовать STR_TO_DATE разобрать строку как дату в формате, который вы ожидаете. Эта функция возвращает NULL, если она не может проанализировать дату в указанном формате. Ваш плохой вход JavaScript попадают в эту категорию, и следует производить NULL:

SELECT * 
FROM table_name 
WHERE STR_TO_DATE(userInput, '%Y-%m-%d') IS NOT NULL AND 
     <other conditions here> 

STR_TO_DATE in MariaDB
STR_TO_DATE in MySQL

Смежные вопросы