Na tentativa de inserir um valor não correspondente aos passados no ENUM, este é inserido normalmente com valor "blank". Ou seja, ele não restringe, apenas joga um valor em branco no caso de não bater com o ENUM, correto?
Na tentativa de inserir um valor não correspondente aos passados no ENUM, este é inserido normalmente com valor "blank". Ou seja, ele não restringe, apenas joga um valor em branco no caso de não bater com o ENUM, correto?
Na verdade não, Enzo. Se definirmos para forma_pagt, por exemplo, enum('cartao', 'boleto', 'dinheiro'), ao tentarmos inserir uma linha cujo valor de forma_pagt não seja um dos três definidos, recebemos um alerta de erro e a ação não é concluída. Teste você mesmo!
Um exemplo baseado na tabela de compras apresentada no curso. Dou o comando para inserir uma linha cujo valor de forma_pagt não bata com um dos três definidos:
mysql> insert into compras (valor, data, observacoes, recebido, forma_pagt) values (200, '2008-05-14', 'PIZZA', 1, 'cheque');
Recebo, então, um alerta de erro:
ERROR 1265 (01000): Data truncated for column 'forma_pagt' at row 1
Oi Enzo
Se você fazer um insert em um com um valor ENUM que não é esperado é restringido sim e ocorre essa mensagem: Data truncated for column 'columnName'
Que estranho, galera! Aqui insere normalmente, porém com valor "em branco". Talvez seja alguma configuração do MySQL, então!
Se você fazer esse comando :
show create table 'nomeTabela'
ele vai retornar o nome de cada coluna e mostra o seu tipo, você vai ver que o seu campo enum tem um default value que é null.
Talvez seja isso que acontece no seu banco Enzo
Mas então, para funcionar o ENUM devo declará-lo como NOT NULL, também?
Mesmo declarando a coluna como NOT NULL, continua inserindo normalmente com valor "em branco" no caso de não bater com o ENUM. O engraçado é que se insiro com um dos valores passados no ENUM, funciona normalmente, rs.
Enzo, você fez o comando que te pedi ? Cola o resultado aqui por favor.
compras | CREATE TABLE `compras` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`valor` double DEFAULT NULL,
`data` date DEFAULT NULL,
`observacoes` varchar(255) NOT NULL,
`recebido` tinyint(1) DEFAULT '0',
`forma_pagto` enum('Cartão','Boleto','Dinheiro') NOT NULL,
`comprador_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `comprador_id` (`comprador_id`),
CONSTRAINT `compras_ibfk_1` FOREIGN KEY (`comprador_id`) REFERENCES `compradores` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=56 DEFAULT CHARSET=latin1
o campo forma_pagto não poderá receber branco por estar NOT NULL e deve receber um dos valores do Enum.
Oi Enzo
Pelo que pesquisei, a configuração do MySql está sem esse o parâmetro STRICT_TRANS_TABLES
no seu my.cnf, só ir no arquivo e colocar esse cara no sql_mode:
# Recommended in standard MySQL setup
sql_mode=<outrosParametros>,STRICT_TRANS_TABLES
tente fazer isso e me fale ok ?
Esta configuração já está habilitada, Caio.
Vou postar um trecho do SELECT:
| 45 | 500 | 2015-12-02 | PRESENTE PRA MÃE | 1 | Boleto | 1 |
| 46 | 255 | 2015-10-18 | PRESENTE DO PAI | 0 | Boleto | 1 |
| 47 | 255 | 2015-10-18 | PRESENTE DO IRMAO | 0 | Cartão | 1 |
| 55 | 1250.5 | 2015-12-04 | PRESENTE DO PAI | 0 | | 1 |
+----+----------+------------+------------------------------+----------+-------------+--------------+
Nota o valor do campo "forma_pagt" no id 55. Tentei fazer um INSERT com valor "Cheque", e ao invés de restringir, ele adicionou esse "blank".
Oi Enzon
Consegue colar o conteúdo do my.cnf ? Só para confirmar que não tem nada de diferente, e também posso fazer uns testes.
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html
# *** DO NOT EDIT THIS FILE. It's a template which will be copied to the
# *** default location during install, and will be replaced if you
# *** upgrade to a newer version of MySQL.
[mysqld]
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
# These are commonly set, remove the # and set as required.
# basedir = .....
# datadir = .....
# port = .....
# server_id = .....
# socket = .....
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES