簡體   English   中英

相同的MySQL查詢在MySQL Workbench中返回的結果與從命令行返回的結果不同

[英]Identical MySQL query returning different result in MySQL Workbench than from command-line

這個查詢`

delimiter $$

CREATE DEFINER=`root`@`localhost` FUNCTION `calculatePrice`(cheese VARCHAR(50), meat VARCHAR(50), veg VARCHAR(50)) RETURNS decimal(10,0)
    DETERMINISTIC
BEGIN
DECLARE price DECIMAL;
SET price = (SELECT  SUM(x.Price) 
    FROM
    (
        SELECT `priceFactor` AS Price FROM `tblCheese` WHERE `cheeseName` = cheese
        UNION ALL 
        SELECT `priceFactor` AS Price FROM `tblMeat` WHERE `meatName` = meat 
        UNION ALL 
        SELECT `priceFactor` AS Price FROM `tblVeggie` WHERE `veggieName` = veg
    ) x );
RETURN price;
END$$

`

從MySQL命令行客戶端調用時返回數學上正確的答案,但對於任何其他程序或從PHP調用時它都是錯誤的(無論傳遞什么參數,它都返回3)。見下文: 相同的查詢,相同的參數,不同的結果

調用語句,如果它模糊,是SELECT calculatePrice('colby','sausage','black beans');

我以前從未見過這種古怪。 它完全取決於MySQL的同一副本等。

編輯添加:phpMyAdmin也會產生查詢的正確答案。

我可以告訴你那是怎么回事。

MySQL的發布時間最長,latin1_swedish_ce作為幾乎所有內容的默認字符集。 現在,您通常在創建數據庫時會處理字符集,因此存在的危險很小。

但是,通過線路傳輸數據需要編碼,並且解釋用戶端的數據也需要解釋。 所以也有設置。 MySQL工具的標准字符集(因為它們來自同一家公司)latin1_swedish。

這是否會成為查詢的問題在很大程度上取決於查詢運行的所有數據。 此外,在查詢中使用常量字符串時,它們的解釋方式與從數據庫到客戶端的數據的解釋方式大致相同。

因此,字符編碼通常是問題,它也在這里。

@ x0cafebabe點擊它:除了我的一個character_變量之外的所有變量都被設置為UTF8,這是我在安裝MySQL時指定的,但是character_set_database被設置為瑞典語編碼。 我解決了這個問題,現在MySQL功能在各種介質中都是一致的。 為什么這會產生影響,我不知道(我在評論中提到過),但確實如此。

我將永遠檢查這個我曾經做過的每次MySQL安裝......對於這樣一個微不足道的設置來說太過頭疼了!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM