Sorry, I have to disagree. When I disabled this check in PHP code, the database happily accepted the same UTF-8 string which was less than 30 characters, but more than 30 bytes. I guess the table field declaration VARCHAR(30) operates on characters and not on bytes