在MySQL查詢(xún)的時(shí)候,如果涉及到負(fù)數(shù)的顯示,有時(shí)候會(huì)出現(xiàn)負(fù)數(shù)顯示為0的情況,這種情況一般是由于數(shù)據(jù)類(lèi)型或者查詢(xún)語(yǔ)句的問(wèn)題所導(dǎo)致的。
例如,我們有一個(gè)表格student,其中age列中有負(fù)數(shù),如果我們查詢(xún)?cè)摿袛?shù)據(jù),會(huì)出現(xiàn)負(fù)數(shù)顯示為0的情況。 mysql>select age from student; +-----+ | age | +-----+ | 20 | | -25 | | -30 | +-----+ 3 rows in set (0.00 sec) 這是因?yàn)镸ySQL默認(rèn)情況下,把負(fù)數(shù)當(dāng)做unsigned類(lèi)型處理,因此在查詢(xún)過(guò)程中會(huì)把負(fù)數(shù)轉(zhuǎn)換為0。
要解決這個(gè)問(wèn)題,我們需要通過(guò)修改數(shù)據(jù)類(lèi)型或者修改查詢(xún)語(yǔ)句的方式來(lái)實(shí)現(xiàn)。
1. 修改數(shù)據(jù)類(lèi)型: 把負(fù)數(shù)當(dāng)做signed類(lèi)型處理,這樣在查詢(xún)的時(shí)候就能夠正常顯示負(fù)數(shù)了。 例如,我們可以通過(guò)修改age列的數(shù)據(jù)類(lèi)型為int(11) signed來(lái)解決該問(wèn)題。 mysql>alter table student modify age int(11) signed; Query OK, 3 rows affected (0.02 sec) Records: 3 Duplicates: 0 Warnings: 0 現(xiàn)在再次查詢(xún)age列的數(shù)據(jù),就能夠正確顯示負(fù)數(shù)了。 mysql>select age from student; +------+ | age | +------+ | 20 | | -25 | | -30 | +------+ 3 rows in set (0.00 sec) 2. 修改查詢(xún)語(yǔ)句: 在查詢(xún)的時(shí)候加上CAST函數(shù),將負(fù)數(shù)轉(zhuǎn)換成signed類(lèi)型,也可以解決該問(wèn)題。 例如,我們可以通過(guò)以下查詢(xún)語(yǔ)句來(lái)解決該問(wèn)題。 mysql>select CAST(age AS SIGNED) as age from student; +------+ | age | +------+ | 20 | | -25 | | -30 | +------+ 3 rows in set (0.00 sec) 這樣就能夠正確顯示負(fù)數(shù)了。
總之,在MySQL查詢(xún)過(guò)程中,如果出現(xiàn)負(fù)數(shù)顯示為0的情況,需要注意數(shù)據(jù)類(lèi)型或者查詢(xún)語(yǔ)句的問(wèn)題,才能夠得到正確的結(jié)果。