Ho MySQL 4.0.21 e probabilmente ho trovato un bug, quasi sicuramente legato solo alla versione per Windows; ho gia' cercato nel database dei bug di MySQL e non sembra essere riportato.
Vi ricordate il mio post sui nomi delle tabelle maiuscolo/minuscolo? In quel post spiegavo che c'e' una direttiva di MySQL che menzionavo ( --lower_case_table_names=0 ) che imposta MySQL sotto Windows in modo che si comporti esattamente come sotto Linux, e cioe' che se uno fa un bel:
codice:
CREATE TABLE aAaAa
la tabella si chiama effettivamente aAaAa, mentre sotto Windows il comportamento standard e' che si chiami aaaaa (tutto minuscolo).
Apparentemente la direttiva --lower_case_table_names=0 viene ignorata quando si esportano dei FOREIGN KEY COSTRAINTS. Avrei bisogno di capire se anche se sotto la 4.1 questo comportamento e' vero. Putroppo per questioni di sviluppo non posso installare la 4.1 qui da me.
Ecco cosa fare se volete aiutarmi:
- Fate partire MySQL 4.1 sotto Windows con parametro da riga di comando --lower_case_table_names=0
- Create un database vuoto.
- Create una tabella INNODB tabellaMadre (si, la M e' maiuscola) con un solo campo ID, chiave primaria.
- Create una tabella INNODB tabellaFiglia con due campi: ID (chiave primaria) e IDMadre.
- Create un indice su tabellaFiglia.IDMadre
- Create un FOREIGN KEY CONSTRAINT fra tabellaFiglia.IDMadre e tabellaMadre.ID
- A questo punto, fate un mysqldump del database.
Guardate ora il dump. Dovreste trovarvi qualcosa del genere:
codice:
ALTER TABLE `tabellaFiglia`
ADD CONSTRAINT `nome_a_caso` FOREIGN KEY (`IDMadre`) REFERENCES `tabellamadre` (`ID`)
Se la m di tabellaMadre e' minuscola, il bug e' presente anche nella 4.1.
Se invece vi trovate questo:
codice:
ALTER TABLE `tabellaFiglia`
ADD CONSTRAINT `nome_a_caso` FOREIGN KEY (`IDMadre`) REFERENCES `tabellaMadre` (`ID`)
Allora funziona bene.
Chi vuole fare la prova la faccia anche sotto Linux magari, cosi' vediamo cosa salta fuori.