O Windows MySQL v5 gera um erro, mas o Linux e outras versões apenas emitem um aviso. Isso precisa ser corrigido. WTF?
Veja também uma tentativa de corrigir isso como bug # 19498 no MySQL Bugtracker:
Bryce Nesbitt em 4 de abril de 2008 16:36:
No MS Windows, a regra "no DEFAULT" é um erro, enquanto em outras plataformas geralmente é um aviso. Embora não seja um bug, é possível ficar preso a isso se você escrever código em uma plataforma branda e depois executá-lo em uma plataforma estrita:
Pessoalmente, vejo isso como um bug. A pesquisa por "coluna BLOB / TEXT não pode ter um valor padrão" retorna cerca de 2.940 resultados no Google. A maioria deles são relatórios de incompatibilidades ao tentar instalar scripts de banco de dados que funcionavam em um sistema, mas não em outros.
Estou enfrentando o mesmo problema agora em um aplicativo da web que estou modificando para um dos meus clientes, originalmente implantado no Linux MySQL v5.0.83-log. Estou executando o Windows MySQL v5.1.41. Mesmo tentando usar a versão mais recente do phpMyAdmin para extrair o banco de dados, ele não informa um padrão para a coluna de texto em questão. No entanto, quando tento executar uma inserção no Windows (que funciona bem na implantação do Linux), recebo um erro sem padrão na coluna ABC. Tento recriar a tabela localmente com o padrão óbvio (com base em uma seleção de valores exclusivos para essa coluna) e acabo recebendo a coluna BLOB / TEXT tão útil que não pode ter um valor padrão .
Novamente, não manter a compatibilidade básica entre plataformas é inaceitável e é um bug.
Como desativar o modo estrito no MySQL 5 (Windows):
Edite /my.ini e procure a linha
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
Substitua por
sql_mode='MYSQL40'
Reinicie o serviço MySQL (assumindo que seja mysql5)
net stop mysql5
net start mysql5
Se você tiver acesso root / admin, poderá executar
mysql_query("SET @@global.sql_mode='MYSQL40'");