Feluxe: errno 150: Problem mit foreign key

Moin moin. Ich bin am Verzweifeln... beim Anlegen folgender Tabellen bekomme ich einen errno 150 (also ein Problem mit dem foreign key):

//Tabellenstruktur für Tabelle land
mysql_query("CREATE TABLE IF NOT EXISTS land (
  Land\_ID int(11) NOT NULL auto_increment,
  Land\_Name text NOT NULL,
  Landessprache text,
  Waehrung text,
  PRIMARY KEY  (Land\_ID)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE utf8_unicode_ci AUTO_INCREMENT=8");

//Tabellenstruktur für Tabelle region
mysql_query("CREATE TABLE IF NOT EXISTS region (
  Region\_ID int(11) NOT NULL auto_increment,
  Region\_Name text NOT NULL,
  Region\_Beschreibung text,
  Region\_Sehenswuerdigkeiten text,
  Land\_ID int(11) NOT NULL,
  PRIMARY KEY  (Region\_ID),
  INDEX (Land\_ID),
  CONSTRAINT fk\_Land FOREIGN KEY (Land\_ID) REFERENCES Land (Land\_ID) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE utf8_unicode_ci AUTO_INCREMENT=8");

Ich hab schon ne Stunde gegooglet und einige mögliche Lösungen gefunden: Sicherstellen, dass die Datentypen der beiden verknüpften Spalten übereinstimmen (stimmt, beides int(11)). SIcherstellen, dass der gleiche Character Set vorliegt (beides utf-8). Sicherstellen, dass das Fremdschlüssel-Feld indiziert ist (ist es). Mir fällt jetzt nichts mehr ein, woran das liegen könnte... kann mir hier jemand helfen? Gruß, Felix

  1. Hallo,

    beim Anlegen folgender Tabellen bekomme ich einen errno 150 (also ein Problem mit dem foreign key):

    mit folgenden Anweisungen (PHP-Kram entfernt)

    CREATE TABLE IF NOT EXISTS land (

    Land_ID int(11) NOT NULL auto_increment,
      Land_Name text NOT NULL,
      Landessprache text,
      Waehrung text,
      PRIMARY KEY  (Land_ID)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE utf8_unicode_ci AUTO_INCREMENT=8

      
    »~~~sql
    CREATE TABLE IF NOT EXISTS `region` (  
    
    >   `Region_ID` int(11) NOT NULL auto_increment,  
    >   `Region_Name` text NOT NULL,  
    >   `Region_Beschreibung` text,  
    >   `Region_Sehenswuerdigkeiten` text,  
    >   `Land_ID` int(11) NOT NULL,  
    >   PRIMARY KEY  (`Region_ID`),  
    >   INDEX (`Land_ID`),  
    >   CONSTRAINT `fk_Land` FOREIGN KEY (`Land_ID`) REFERENCES `Land` (`Land_ID`) ON DELETE CASCADE ON UPDATE CASCADE  
    > ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE utf8_unicode_ci AUTO_INCREMENT=8
    
    

    kann ich Dein Problem mit MySQL 5.0.51 nicht nachvollziehen.
    Die Tabellen lassen sich problemlos anlegen, sowohl mit MySQL-Query-Browser
    als auch mit dem mysql-Kommandozeilenclient.

    Frage:
    Warum verwendest Du für Deine Spalten den Datentyp TEXT statt VARCHAR(geeignete Länge)?

    Freundliche Grüße

    Vinzenz

    1. Hello,

      kann ich Dein Problem mit MySQL 5.0.51 nicht nachvollziehen.
      Die Tabellen lassen sich problemlos anlegen, sowohl mit MySQL-Query-Browser
      als auch mit dem mysql-Kommandozeilenclient.

      verdammt, da war einer 30sekunden schneller...

      MfG
      Rouven

      --
      -------------------
      sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
      There's no such thing as a free lunch  --  Milton Friedman
    2. Hallo,

      beim Anlegen folgender Tabellen bekomme ich einen errno 150 (also ein Problem mit dem foreign key):

      mit folgenden Anweisungen (PHP-Kram entfernt)

      CREATE TABLE IF NOT EXISTS land (

      Land_ID int(11) NOT NULL auto_increment,
        Land_Name text NOT NULL,
        Landessprache text,
        Waehrung text,
        PRIMARY KEY  (Land_ID)
      ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE utf8_unicode_ci AUTO_INCREMENT=8

      
      >   
      > »~~~sql
      
      CREATE TABLE IF NOT EXISTS `region` (  
      
      > >   `Region_ID` int(11) NOT NULL auto_increment,  
      > >   `Region_Name` text NOT NULL,  
      > >   `Region_Beschreibung` text,  
      > >   `Region_Sehenswuerdigkeiten` text,  
      > >   `Land_ID` int(11) NOT NULL,  
      > >   PRIMARY KEY  (`Region_ID`),  
      > >   INDEX (`Land_ID`),  
      > >   CONSTRAINT `fk_Land` FOREIGN KEY (`Land_ID`) REFERENCES `Land` (`Land_ID`) ON DELETE CASCADE ON UPDATE CASCADE  
      > > ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE utf8_unicode_ci AUTO_INCREMENT=8
      
      

      kann ich Dein Problem mit MySQL 5.0.51 nicht nachvollziehen.
      Die Tabellen lassen sich problemlos anlegen, sowohl mit MySQL-Query-Browser
      als auch mit dem mysql-Kommandozeilenclient.

      Dazu muss ich sagen, dass die Anweisungen bei meinem lokalen Webserver (xampp Distribution) ebenfalls einwandfrei funktionieren. MySQL-Version kann ich grad nicht nachgucken, ist aber eine 5.0.x. Probleme gab es erst, als ich die Tabellen in einer MySQL-Datenbank auf meinem gemieteten Webspace erzeugen wollte. Vielleicht liegt das also einfach an merkwürdigen Einstellungen beim Hoster...?

      Frage:
      Warum verwendest Du für Deine Spalten den Datentyp TEXT statt VARCHAR(geeignete Länge)?

      Weil da ziemlich lange Texte in die Spalten reinkommen (Beschreibungen eben). Die Länge ist da vorher nicht abzuschätzen... ansonsten gibts dafür keinen besonderen Grund. Hat denn der Datentyp TEXT irgendwelche Nachteile?

      Freundliche Grüße

      Vinzenz

      Gruß, Felix