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
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
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?
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!