Возможно, на вашем сервере включен строгий режим, а не локальный экземпляр MySQL.
Проверьте это так:
mysql> SELECT @@sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@sql_mode |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
Выше приведено значение sql_mode по умолчанию для MySQL 5.7.8 и более поздних версий. Включает строгий режим.
Одним из эффектов строгого режима является то, что если вы сохраняете строковое или числовое значение в столбце, который недостаточно велик, чтобы принять это значение, вы получите ошибку. Без строгого режима MySQL вставляет строку, но обрезает значение.
Вот демонстрация:
mysql> create table t ( v varchar(10) );
mysql> insert into t set v = 'Now is the time for all good men to come to the aid of their country';
ERROR 1406 (22001): Data too long for column 'v' at row 1
mysql> set sql_mode='';
mysql> insert into t set v = 'Now is the time for all good men to come to the aid of their country';
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> show warnings;
+---------+------+----------------------------------------+
| Level | Code | Message |
+---------+------+----------------------------------------+
| Warning | 1265 | Data truncated for column 'v' at row 1 |
+---------+------+----------------------------------------+
mysql> select * from t;
+------------+
| v |
+------------+
| Now is the |
+------------+
Строгий режим - это хорошая вещь . Лучше знать, что ваши данные не будут соответствовать, а не обрезаться.
Вы должны разрабатывать с локальным экземпляром MySQL, который имеет ту же версию и тот же sql_mode, что и экземпляр MySQL, к которому вы в конечном итоге будете развертываться в рабочей среде. В противном случае вы обнаружите, что в вашем коде есть ошибки в работе, которые не возникают в процессе разработки, и он будет запутанным и сложным для отладки.
Скорее всего, вы не сможете продублировать все аспекты вашей производственной среды, но если сможете, сделайте свою среду разработки как можно ближе.
Чтобы решить эту проблему, убедитесь, что для столбца выбран тип данных, который может содержать длинные данные, которые вы отправляете.
- VARBINARY и BLOB вмещают до 64 КБ
- MEDIUMBLOB вмещает до 16 МБ
- LONGBLOB вмещает до 4 ГБ
Читайте https://dev.mysql.com/doc/refman/8.0/en/string-type-overview.html для более подробной информации.