后台列表按 date 字段字典序升序,2026-3-5 排在 2026-12-01 之后,最早的一条跑到最上面。库里 37 条记录的月份都没补零。日志里能对上时间点,这种反而好排。
字符串比较逐位比 ASCII,第三位 3 大于 1,判断在月份第一位就结束了。日期没补零时,字典序和真实时间顺序本来就不一致。这一点先确认清楚,后面就不用反复试。
python3 -c "print(sorted(['2026-3-5','2026-12-01','2026-01-10']))" mysql -N -e "SELECT date FROM posts ORDER BY STR_TO_DATE(date,'%Y-%c-%e') DESC LIMIT 5"
「时间字符串排序」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。
报错里带路径的,先去看那个路径在不在、权限对不对。同一份配置存在多处的,先确认改的是被加载的那一份。
处理上按这个顺序:入库前把日期统一成 YYYY-MM-DD 补零格式;字段类型改成 date 让数据库比较真实时间;查询直接 order by 该列 不要对字符串做隐式转换;历史数据跑一次批量 UPDATE 补零。
结果对不对很好判断,列表按时间倒序 2026-12-01 在最前 2026-3-5 跟在 11 月之后。
