Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Recorte automaticamente as strings no comprimento adequado na inserção


Na verdade, o MySQL trunca strings para a largura da coluna por padrão. Gera um aviso, mas permite a inserção.
mysql> create table foo (str varchar(10));
mysql> insert into foo values ('abcdefghijklmnopqrstuvwxyz');
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> show warnings;
+---------+------+------------------------------------------+
| Level   | Code | Message                                  |
+---------+------+------------------------------------------+
| Warning | 1265 | Data truncated for column 'str' at row 1 | 
+---------+------+------------------------------------------+
mysql> select * from foo;
+------------+
| str        |
+------------+
| abcdefghij | 
+------------+

Se você definir o modo SQL estrito, ele transformará o aviso em erro e rejeitará a inserção.

Re seu comentário:O modo SQL é uma configuração do MySQL Server. Provavelmente não é o PDO que está causando isso, mas por outro lado é possível, porque qualquer cliente pode definir o modo SQL para sua sessão.

Você pode recuperar o valor sql_mode global ou de sessão atual com as seguintes instruções:
SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;

O padrão deve ser uma string vazia (sem modos definidos). Você pode definir o modo SQL em seu my.cnf arquivo, com o --sql-mode opção para mysqld, ou usando um SET demonstração.

Atualização:MySQL 5.7 e posterior define o modo estrito por padrão. Consulte https://dev.mysql.com/doc/ refman/5.7/en/sql-mode.html