Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

erro 1265 alter table

Não consigo fazer a alteração da tabela seja em caixa alta ou não.

mysql> ALTER TABLE COMPRAS MODIFY COLUMN observacoes TEXT NOT NULL;
ERROR 1265 (01000): Data truncated for column 'observacoes' at row 38
7 respostas

Bom dia Geovane, essa tabela já possui dados e alguns deles not null?

Sim, já possui dados. Sobre o not null não tenho certeza.

+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | int(11)      | NO   | PRI | NULL    | auto_increment |
| valor       | double       | YES  |     | NULL    |                |
| data        | date         | YES  |     | NULL    |                |
| descricao   | varchar(255) | YES  |     | NULL    |                |
| observacoes | varchar(255) | YES  |     | NULL    |                |
| recebido    | tinyint(1)   | YES  |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+
6 rows in set (0,00 sec)

apenas o id não pode ser null, certo?

solução!

Geovane,

O problema é bem o que o Guilherme destacou: estamos modificando para NOT NULL uma coluna que tem valores nulos.

Aí, o MySQL impede que você coloque a coluna para NOT NULL porque ele não sabe o que pôr no lugar.

Chegou a ver na aula a questão do valor DEFAULT. No seu ALTER TABLE, você pode definir o valor padrão.

Só que isso só vale para novos INSERT. Se você já tem valores nulos numa tabela e quer passar pra NOT NULL, você precisa fazer um UPDATE antes.

Ah, mais um detalhe: uma coluna TEXT não pode ter uma valor DEFAULT.

Segue uma sessão do MySQL com uma tabela de aluno bem simples:

mysql> create table aluno(nome varchar(255));
Query OK, 0 rows affected (0.04 sec)

mysql> insert into aluno values('joao da silva');
Query OK, 1 row affected (0.00 sec)

mysql> insert into aluno values(NULL);
Query OK, 1 row affected (0.01 sec)

mysql> select * from aluno;
+---------------+
| nome          |
+---------------+
| joao da silva |
| NULL          |
+---------------+
2 rows in set (0.00 sec)

mysql> alter table aluno modify column nome text not null;
ERROR 1265 (01000): Data truncated for column 'nome' at row 2

mysql> select * from aluno;
+---------------+
| nome          |
+---------------+
| joao da silva |
| NULL          |
+---------------+
2 rows in set (0.00 sec)

mysql> desc aluno;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| nome  | varchar(255) | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
1 row in set (0.00 sec)

mysql> alter table aluno modify column nome text not null default 'a';
ERROR 1101 (42000): BLOB/TEXT column 'nome' cant have a default value

mysql> alter table aluno modify column nome varchar(255) not null default 'a';
ERROR 1138 (22004): Invalid use of NULL value

mysql> update aluno set nome = 'a' where nome is NULL;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> alter table aluno modify column nome varchar(255) not null default 'a';
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc aluno;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| nome  | varchar(255) | NO   |     | a       |       |

Para eu entender: o problema é que estou querendo alterar uma tabela no qual um campo tem valor null, certo? Para conseguir fazer essa alteração preciso excluir essa linha (id = 43) ou alterar esse valor. É isso?

mysql> select * from COMPRAS;
+----+----------+------------+-----------+-------------------------+----------+
| id | valor    | data       | descricao | observacoes             | recebido |
+----+----------+------------+-----------+-------------------------+----------+
|  5 |       10 | 2009-01-23 | NULL      | uma compra comum        |        1 |
|  6 |       10 | 2009-03-03 | NULL      | uma compra comum        |        1 |
|  8 |       10 | 2009-03-21 | NULL      | uma compra comum        |        1 |
|  9 |       10 | 2009-04-12 | NULL      | uma compra comum        |        0 |
| 10 |       10 | 2009-05-23 | NULL      | uma compra comum        |        0 |
| 11 |    78.65 | 2009-12-04 | NULL      | entregues antes de 2011 |        1 |
| 12 |       10 | 2009-01-06 | NULL      | uma compra comum        |        0 |
| 13 |    98.12 | 2009-07-09 | NULL      | entregues antes de 2011 |        1 |
| 14 |       10 | 2009-01-12 | NULL      | uma compra comum        |        1 |
| 15 |   3212.4 | 2009-11-13 | NULL      | entregues antes de 2011 |        1 |
| 16 |   223.09 | 2009-12-17 | NULL      | entregues antes de 2011 |        1 |
| 17 |       10 | 2009-01-16 | NULL      | uma compra comum        |        1 |
| 18 |    827.5 | 2010-01-09 | NULL      | entregues antes de 2011 |        1 |
| 19 |       12 | 2010-02-19 | NULL      | entregues antes de 2011 |        1 |
| 20 |   678.43 | 2010-05-21 | NULL      | entregues antes de 2011 |        1 |
| 21 | 10937.12 | 2010-04-30 | NULL      | entregues antes de 2011 |        1 |
| 22 |     1501 | 2010-06-22 | NULL      | entregues antes de 2011 |        1 |
| 23 |     1709 | 2010-08-25 | NULL      | uma compra comum        |        0 |
| 24 |   567.09 | 2010-09-25 | NULL      | uma compra comum        |        0 |
| 25 |   631.53 | 2010-10-12 | NULL      | datas festivas          |        1 |
| 26 |   909.11 | 2010-02-11 | NULL      | entregues antes de 2011 |        1 |
| 27 |   768.18 | 2010-04-10 | NULL      | entregues antes de 2011 |        1 |
| 28 |      434 | 2010-04-01 | NULL      | entregues antes de 2011 |        1 |
| 29 |    115.9 | 2010-06-12 | NULL      | entregues antes de 2011 |        1 |
| 30 |       98 | 2010-10-12 | NULL      | datas festivas          |        0 |
| 31 |    253.7 | 2010-12-20 | NULL      | preparando o natal      |        0 |
| 32 |   370.15 | 2010-12-25 | NULL      | datas festivas          |        0 |
| 33 |    32.09 | 2011-07-02 | NULL      | uma compra comum        |        1 |
| 34 |   954.12 | 2011-11-03 | NULL      | uma compra comum        |        1 |
| 35 |     98.7 | 2011-02-07 | NULL      | uma compra comum        |        1 |
| 36 |    213.5 | 2011-09-25 | NULL      | uma compra comum        |        0 |
| 37 |   1245.2 | 2011-10-17 | NULL      | uma compra comum        |        0 |
| 38 |    23.78 | 2011-12-18 | NULL      | uma compra comum        |        1 |
| 39 |   576.12 | 2011-09-13 | NULL      | uma compra comum        |        1 |
| 40 |    12.34 | 2011-07-19 | NULL      | uma compra comum        |        0 |
| 41 |    87.43 | 2011-05-10 | NULL      | uma compra comum        |        0 |
| 42 |   887.66 | 2011-02-02 | NULL      | uma compra comum        |        1 |
| 43 |      100 | 2010-10-10 | NULL      | NULL                    |        1 |
+----+----------+------------+-----------+-------------------------+----------+
38 rows in set (0,00 sec)

isso!

Acho que o problema é o registro de id 43 que é a linha 38 dos resultados e cujo campo observacoes está NULL.

Veja que na mensagem de erro ele fala da linha 38: ERROR 1265 (01000): Data truncated for column 'observacoes' at row 38

Boa galera!!!

Perfeito galera! Resolvido!