MySQL错误日期计算

时间:2019-01-12 22:45:02

标签: mysql sql

我第一次看到此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,也没有正确的数学答案:

Image attachment

2 个答案:

答案 0 :(得分:1)

您的结果“正确”,但显示为十六进制字符串。

ASCII中的'4'为0x34

'baigesi'    b => 62    一个=> 61

等,所以最终得到62616967657369

这很可能是phpmyadmin的配置,因为它是在4转换为字符串后发生的。尝试使用其他客户端,看看会得到什么结果。

另一种可能性是连接上的排序规则设置。查看此错误报告 https://bugs.mysql.com/bug.php?id=35211

这似乎是在连接协议上使用utf8_bin编码的结果。

答案 1 :(得分:0)

这不会解决您的问题,但是会给您一个提示。

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

因此,当您获得62616967657369时,它不是2*2的对象,而不是baigesi的对象。