PDOException al crear la tabla: tabla base o vista no encontrada [cerrado]

8

Tengo Drupal ejecutándose en MariaDB 5.5.33. Cuando ejecuto update.php (después de actualizar a Drupal 7.28 desde Drupal 6) aparece un error:

Error: PDOException: SQLSTATE [42S02]: no se encuentra la tabla o vista base: 1146 La tabla 'webdb.location_country' no existe: CREATE TABLE {location_country} ( codeCHAR (2) NOT NULL COMMENT 'Clave principal: Código de país ISO de dos letras ', nameVARCHAR (255) NO NULL POR DEFECTO' 'COMENTARIO' Nombre completo del país ', PRIMARY KEY ( code)) MOTOR = InnoDB DEFAULT CHARACTER SET utf8 COMENTARIO' Datos del país gestionados por location.module. '; Array () indb_create_table () (línea 2720 de /home/web/public_html/includes/database/database.inc).

Cuando intento ejecutar el comando

CREATE TABLE {location_country} ( codeCHAR (2) NOT NULL COMENTARIO 'Clave principal: código de país ISO de dos letras', nameVARCHAR (255) NOT NULL DEFAULT '' COMENTARIO 'Nombre completo del país', PRIMARY KEY ( code)) ENGINE = InnoDB DEFAULT CHARACTER SET utf8 COMENTARIO 'Datos del país gestionados por location.module.';

en phpMyAdmin me sale un error

# 1064 - Tiene un error en su sintaxis SQL; consulte el manual que corresponde a la versión de su servidor MariaDB para obtener la sintaxis correcta para usar cerca de '{location_country} ( codeCHAR (2) NOT NULL COMMENT' Clave principal: dos letras IS 'en la línea 1

Pero no pude averiguar dónde está el problema.

Tilia
fuente

Respuestas:

6

Tuve el mismo problema, y ​​en mi caso el problema era el motor de tablas de la base de datos: por defecto, es InnoDB y (por algunas razones, aún no tengo que entenderlo) Drupal informa este error.

Debe cambiar el motor de la base de datos a MyISAM. En primer lugar, debe asegurarse de que las tablas que creará Drupal tengan MyISAM como motor: En /includes/database/mysql/schema.inc, busque createTableSql($name, $table)y cambie InnoDB a MyISAM; entonces, guárdalo.
Como tiene algunas tablas en su base de datos, también debe cambiarlas MyISAM, así que simplemente exporte la base de datos como archivo .sql, ábralo en un editor de texto y reemplácelo Engine=InnoDBcon Engine=MyISAM. Ahora, en el servidor, phpmyadminelimine todas las tablas de la base de datos e importe el nuevo .sqlarchivo allí. De esta forma, todas sus tablas y las tablas que creará Drupal son MyISAM.

M ama D
fuente
De hecho, el problema estaba en el motor. Creé la tabla como MyISAM. Luego lo exporté, cambié do InnoDB e intenté volver a importar. No funcionó. Entonces cambié a MyISAM como se describe en el enlace. Parece estar funcionando. Muchas gracias.
Tilia
3

Dado que otras respuestas (incluidas las que no están relacionadas de ninguna manera con el motor InnoDB) a preguntas sobre esta PDOException están marcadas como duplicadas y redirigen a esta, supongo que este es el lugar canónico para obtener respuestas sobre este problema.

He encontrado esto varias veces al desinstalar un módulo, y la tabla buscada no existe en el sitio (porque se ha eliminado por accidente, porque hay un error tipográfico en la definición del esquema .installo por alguna otra razón).

La forma más sencilla de solucionarlo es ejecutar el script de actualización de la base de datos ( update.php) manualmente.

Después de que su sitio vuelva a la vida, debe tratar de descubrir la causa raíz del problema y solucionarlo.

Radicales libres
fuente
2

Deberá eliminar las llaves alrededor del nombre de la tabla cuando lo use como SQL sin formato.

p.ej:

CREATE TABLE location_country ( `code` CHAR(2) NOT NULL COMMENT 'Primary Key: Two letter ISO Country Code', `name` VARCHAR(255) NOT NULL DEFAULT '' COMMENT 'Full Country Name ', PRIMARY KEY (`code`) ) ENGINE = InnoDB DEFAULT CHARACTER SET utf8 COMMENT 'Country data managed by location.module.';
David Thomas
fuente
Interesante. ¿Por qué Drupal muestra el comando SQL con una sintaxis incorrecta? De todos modos, no funcionó. Funcionó en TEST DB, no en el deseado. Finalmente, la solución fue cambiar al motor MyISAM como se describe a continuación.
Tilia
Drupal agrega las llaves para detectar nombres de tablas y aplicar el prefijo de la base de datos antes de ejecutar la consulta.
sanzante
1

Este es el mismo mensaje de error que se encontró al mover Drupal 7 de un sitio de desarrollo a otro sitio de desarrollo en mi computadora portátil. Después de verificar las tablas en la base de datos de Drupal, descubrí que no se importaba el volcado de sql completo (usando Adminer y la opción "Desde el servidor", adminer.sql).

Busque las tablas de la base de datos de Drupal 7 que se acercan alfabéticamente al final del volcado de SQL, como: user * , views * , webform * , workbench * , xmlsitemap * para ver si todo se importó.

Solía drush sql-cli < database.sqlimportar el volcado de sql en la base de datos de Drupal después de soltar todas las tablas de la base de datos drush sql-drop.

frederickjh
fuente