SQLSTATE[HY000]: General error: 1005 Can’t create table

Jeżeli przy próbie wywołania polecenia:

$symfony doctrine:insert-sql

Wyskakuje Ci błąd

SQLSTATE[HY000]: General error: 1005 Can't create table 'TwojaBazaDanych.#sql-6c_2d' (errno: 121)

To znaczy że mysql nie może utworzyć relacji między obiektami, z trywialnego powodu pole klucza obcego jest różnego typu od pola powiązanego w lokalnej tabeli.


Np:

 INT => BIGINT

Doctrine jako domyślny typ na Primiary Key wybiera integer(8) czyli BIGINT. Zatem jeśli zdefiniowałeś klucz obcy w schemacie obiektu o innej wielkości Integera To nie zadziała.

schema.yml typ w MySQl typ w PostgreSQL
integer integer int/serial
integer(1) tinyint smallint/serial
integer(2) smallint smallint/serial
integer(3) mediumint int/serial
integer(4) int int/serial
integer(5) bigint bigint/bigserial

Jeżeli po poprawkach schematu (config/doctrine/schema.yml) i przeprowadzeniu operacji:

$symfony doctrine:build --model
$symfony doctrine:build --sql
$symfony doctrine:insert-sql

Jesteś pewien że błędów już nie ma w schemacie a w phpMyAdminie pola nie są identyczne. To polecam:

DROP DATABASE TwojaBazaDanych;
CREATE DATABASE TwojaBazaDanych;

Tags: , , ,

wtorek, Luty 22nd, 2011 doctrine, MySql, php, symfony, Webdevelopment

2 komentarzy to SQLSTATE[HY000]: General error: 1005 Can’t create table

  • Damian pisze:

    Zmieniłęm w schema.sql wszystkie typy na BIGINT. po wykonaniu polecen inser-sql dalej zwraca te nsam błąd. Jaka może być jeszcze przyczyna ?

  • Max Małecki pisze:

    Zobacz co masz w bazie danych albu w schema.sql zwróć uwagę na zgodność typów pól w relacji.

  • Leave a Reply

     

    Enter your email address to subscribe to this blog and receive notifications of new posts by email.