to my knowledge, the general rule for validators is that if you have multiple requirements, you should pass a list.
That being said, the are "special" validator, like IS_EMPTY_OR, that take a validator as an argument.
Goes without saying (it quite translates well), that IS_EMPTY_OR(IS_LENGTH(8)) EITHER accepts nothing or a string shorter than 8 chars.
Now, the "deal". How would you consider a field in a form that is not filled ? None or '' ?
IS_NOT_EMPTY() prevents an empty input.
it's not clear what you want, but I guess something got cleared with my previous comments.
Also, validators ONLY apply when you use them: forms, validate_and_insert(), validate_and_update(), etc. Using validators only is perfectly fine if you let the app validate each and every input.
length=123 enforces the underlying column to be of that length, but if you want meaningful errors, you need to use validators anyways.