![](/img/trans.png)
[英]Create MySQL Workbench query plan image from command line / terminal
[英]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.