LENGTH()
возвращает длину строки , измеренную в байтах .
CHAR_LENGTH()
возвращает длину строки , измеренную в символах .
Это особенно актуально для Unicode, в котором большинство символов кодируются двумя байтами. Или UTF-8, где количество байтов меняется. Например:
select length(_utf8 '€'), char_length(_utf8 '€')
--> 3, 1
Как видите, знак евро занимает 3 байта (в кодировке UTF-8 он кодируется как 0xE282AC
), хотя он всего один символ.