最近在使用ECShop構(gòu)建電商網(wǎng)站的過(guò)程中,遇到了一個(gè)問(wèn)題,就是ECShop不支持MySQL 5.5版本。使用MySQL 5.5版本進(jìn)行安裝會(huì)出現(xiàn)各種錯(cuò)誤,導(dǎo)致ECShop無(wú)法正常工作。下面我們來(lái)看一下這個(gè)問(wèn)題的具體情況:
Error 1055:Expression #8 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'ecs_goods.goods_id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
這個(gè)錯(cuò)誤的原因是MySQL 5.5引入了新的嚴(yán)格模式“only_full_group_by”,它會(huì)使得GROUP BY語(yǔ)句必須包含SELECT語(yǔ)句中沒(méi)有被聚合的所有列,否則就會(huì)報(bào)錯(cuò)。而ECShop在查詢商品列表的時(shí)候,沒(méi)有把所有的列都包含在GROUP BY語(yǔ)句中,因此就導(dǎo)致了這個(gè)問(wèn)題。
解決這個(gè)問(wèn)題的方法有兩個(gè):
第一種方法是修改MySQL的配置文件,禁用“only_full_group_by”模式。具體做法是在my.cnf配置文件中添加一行如下的代碼:
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
這個(gè)方法比較簡(jiǎn)單,但是需要重啟MySQL才能生效。另外,這種做法也可能會(huì)導(dǎo)致其他程序的不兼容性,因此需要謹(jǐn)慎考慮。
第二種方法是修改ECShop的程序源代碼,使其能夠兼容MySQL 5.5。具體做法是在ecs_goods表的商品列表查詢語(yǔ)句中,把所有沒(méi)有被聚合的字段都添加到GROUP BY語(yǔ)句中:
SELECT * FROM ecs_goods GROUP BY goods_id, cat_id, brand_id, goods_name, market_price, shop_price, is_on_sale, is_alone_sale, goods_number, sold_number, add_time, last_update, goods_type, provider_name, provider_phone, provider_comment, first_letters, goods_brief, original_img, is_real, extension_code, keywords, goods_thumb, goods_img, prom_type, prom_id
這個(gè)方法需要對(duì)ECShop的程序源代碼做出修改,需要一定的編程技能。另外,這種做法也可能會(huì)導(dǎo)致其他程序的不兼容性,需要謹(jǐn)慎考慮。
總之,ECShop不支持MySQL 5.5版本是一個(gè)比較麻煩的問(wèn)題,需要根據(jù)自己的實(shí)際情況來(lái)選擇解決方案。