参考:https://www.cnblogs.com/gomysql/p/3615897.html
MySQL> select version();
因为在 MySQL >= 4.1 版本中,VARCHAR(255) 指定了一个最大长度为 255 个 CHAR(不是字节数)的列。
默认情况下(宽松模式下),如果将一个长度超过 255 个字符的字符串插入到这个列中,MySQL 会截断这个字符串,只保存前 255 个字符,并触发 WARNING,但不会引发错误。这意味着如果你尝试插入一个长度为 260 个字符的字符串到一个 VARCHAR(255) 列中,MySQL 将保留该字符串的前 255 个字符,并丢弃剩余的字符。
显然,这会带来巨大的麻烦。因为数据被截断之后 ORM 就再无法使用常规的编解码格式(e.g. UTF8)进行正常处理。
所以,如果你希望在插入过长的字符串时引发错误,就可以启用 MySQL 的 “严格模式”。此时,MySQL 会拒绝插入长度超过列指定长度的字符串,并抛出一个错误(e.g. Data too long for column)。
MySQL> SET GLOBAL sql_mode='STRICT_ALL_TABLES';
或者你应该在代码逻辑中添加长度校验逻辑。参考:https://stackoverflow.com/questions/64227111/prevent-mysql-to-truncate-values-in-flask-sqlalchemy