MySQL неверный расчет даты - PullRequest
0 голосов
/ 13 января 2019

В первый раз я вижу это поведение sql. Я понятия не имею, как проверить или что делать. После нового года одна из наших систем начала делать странные вещи. Я нашел этот код в системе нашей компании

SELECT masinu_galiojimai. * , 
       galiojimu_tipai.pavadinimas,
       galiojimu_tipai.ispeti_pries_x_dienu, 
       masinos.masinos_nr AS masina,
       IF( DATEDIFF( masinu_galiojimai.galioja_iki, CURDATE( ) ) <0,  "baigesi", 2 *2 ) AS liko
FROM masinos
LEFT JOIN masinu_galiojimai ON masinu_galiojimai.masinos_id = masinos.id
LEFT JOIN galiojimu_tipai ON masinu_galiojimai.ispejimo_id = galiojimu_tipai.id

как вы можете видеть, это очень логично, если TRUE выдает слово: baigesi, а если false, то должно вычислять 2 * 2 (я изменил это сам, чтобы проверить) и в результате я получаю, что 2 * 2 не 4, а 62616967657369. Как это вообще возможно? Если я попытаюсь вычесть сегодняшнюю дату и 2018-12-31, я получу не 13 дней, а 8880.

Сервер работает хорошо, проблем нет. С чего мне начинать проверку или как?

РЕДАКТИРОВАТЬ: чтобы лучше понять, я включаю фото. Как видите, нет слова baigese и нет правильного математического ответа:

Вложение изображения

Ответы [ 2 ]

0 голосов
/ 13 января 2019

Ваши результаты "правильные", но вместо этого отображаются как строки HEX.

'4' в ASCII равно 0x34

'' baigesi б => 62 а => 61

и т. Д., Поэтому вы получите 62616967657369

Скорее всего, это конфигурация phpmyadmin, чем что-либо еще, потому что это происходит после преобразования 4 в строку. Попробуйте другой клиент, чтобы увидеть, какие результаты вы получите.

Другая возможность - настройки сопоставления в соединении. Смотрите этот отчет об ошибке https://bugs.mysql.com/bug.php?id=35211

похоже, это результат использования кодировки utf8_bin в протоколе соединения.

0 голосов
/ 13 января 2019

Это не решит вашу проблему, но даст вам подсказку.

ASCII codes in hex: 
0x62 0x61 0x69 0x67 0x65 0x73 0x69
 b    a    i    g    e    s    i

Поэтому, когда вы получаете 62616967657369, это не для 2*2, а вместо baigesi.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...