The only way to do partitioning in MySQL is via a custom column, where we do MIN/MAX and range queries. NULL values circumvent all of those and get skipped. If the column type is nullable, add a special partition that queries just for that. We limit the count of partitions to 1000 but here it's ok if the total becomes 1001.
Bonus points for handling it in Postgres when the count of partitions is passed along with the custom column, so there it also defaults to min-max.