記錄問題,最近在使用union all聚合了三張表的數據,創建視圖作為查詢主表,發現字段值為中文的篩選無法生效..........
sql示例:
CREATE OR REPLACE VIEW test_view AS SELECTid,`name`,location_address AS address,type,"1" AS data_type,COALESCE ( update_time, create_time ) AS update_time
FROMtable_1 UNION ALL
SELECTid,`name`,location_address AS address,type,"2" AS data_type,COALESCE ( update_time, create_time ) AS update_time
FROMtable_2;
發現除了中文外,數值的都能篩選出來,查詢后發現說是數據庫的字符集得弄成utf8mb4,但是這個基本是沒問題的,并且這個查看也沒問題
-- 查看當前會話的字符集設置
SHOW VARIABLES LIKE 'character_set%';
查詢視圖字符集也沒毛病
SHOW FULL COLUMNS FROM test_view;
通過上述基本排除了是字符集的原因,另外又將兩個表單獨創建并對中文字段值進行篩選,發現單表時是沒問題的,但是一使用union的聚合,篩選就失效了.............
最后網上不斷的查,才找到了說8.0.32的版本 union有問題,升級或更換版本才能解決這個,但是不想再重裝了,使用臨時的方案處理
SET GLOBAL optimizer_switch='derived_condition_pushdown=off';
全局關閉,調整 MySQL 查詢優化器行為的,禁用“派生表條件下推”.....
最終查詢生效,算是臨時解決吧.......