2011-09-28 138 views
0

在我爲Drupal 7構建的模塊中我試圖爲安裝和卸載過程創建數據庫模式。當啓用模塊(並因此安裝它)時,我收到一個錯誤,並且我的表格未創建。drupal數據庫架構錯誤

任何人都可以看到它會出錯嗎?

<?php 
/** 
* Implementation of hook_schema(). 
*/ 
function wind_and_waves_schema() { 
    $schema['wind_and_waves'] = array(
    'description' => 'Caches wind and waves data', 
    'fields' => array(
    'id' => array(
     'description' => 'The unique identifier for this item.', 
     'type' => 'serial', 
     'disp-width' => '11', 
     'unsigned' => TRUE, 
    ), 
    'creation' => array(
     'description' => 'Moment the data has been loaded', 
     'mysql_type' => 'datetime', 
     'disp-width' => '11', 
    ), 
    'load_time' => array(
     'description' => 'Moment the wind data has been loaded by rijkswaterstaat', 
     'mysql_type' => 'datetime', 
     'disp-width' => '11', 
    ), 
    'hoek_wind_snelheid' => array(
     'description' => 'Windsnelheid op hoek', 
     'type' => 'varchar', 
     'disp-width' => '11', 
    ), 
    'hoek_wind_stoot' => array(
     'description' => 'Windstoot op hoek', 
     'type' => 'varchar', 
     'disp-width' => '11', 
    ), 
    'hoek_wind_richting' => array(
     'description' => 'Windrichting op hoek', 
     'type' => 'varchar', 
     'disp-width' => '11', 
    ), 
    'hoek_golf_hoogte' => array(
     'description' => 'golfhoogte op hoek', 
     'type' => 'varchar', 
     'disp-width' => '11', 
    ), 
    'ijmuiden_wind_snelheid' => array(
     'description' => 'Windsnelheid op ijmuiden', 
     'type' => 'varchar', 
     'disp-width' => '11', 
    ), 
    'ijmuiden_wind_stoot' => array(
     'description' => 'Windstoot op ijmuiden', 
     'type' => 'varchar', 
     'disp-width' => '11', 
    ), 
    'ijmuiden_wind_richting' => array(
     'description' => 'Windrichting op ijmuiden', 
     'type' => 'varchar', 
     'disp-width' => '11', 
    ), 
    'ijmuiden_golf_hoogte' => array(
     'description' => 'golfhoogte op ijmuiden', 
     'type' => 'varchar', 
     'disp-width' => '11', 
    ), 
    'golf_periode' => array(
     'description' => 'golfperiode', 
     'type' => 'varchar', 
     'disp-width' => '11', 
    ), 
    'watertemp' => array(
     'description' => 'watertemperatuur', 
     'type' => 'varchar', 
     'disp-width' => '11', 
    ), 
    'luchttemp' => array(
     'description' => 'luchttemperatuur', 
     'type' => 'varchar', 
     'disp-width' => '11', 
    ), 
    ), 
    'primary key' => array('id'), 
); 
    return $schema; 
} 
?> 

的錯誤,我得到:

PDOException:SQLSTATE [42000]:語法錯誤或訪問衝突:1064您的SQL語法錯誤;請檢查與您的MySQL服務器版本對應的手冊,以便在'DEFAULT NULL COMMENT'Windsnelheid op hoek'附近使用正確的語法,hoek_wind_stoot第4行的VARCHAR DEFAULT':CREATE TABLE {wind_and_waves}(id INT unsigned auto_increment DEFAULT NULL COMMENT'The ',creation DATETIME DEFAULT NULL COMMENT'Moment data is loaded',hoek_wind_snelheid VARCHAR DEFAULT NULL COMMENT'Windsnelheid op hoek',hoek_wind_stoot VARCHAR DEFAULT NULL COMMENT'Windstoot op hoek',hoek_wind_richting VARCHAR DEFAULT NULL COMMENT' 「Windrichting op hoek',hoek_golf_hoogte VARCHAR DEFAULT NULL COMMENT'golfhoogte op hoek',ijmuiden_wind_snelheid VARCHAR DEFAULT NULL COMMENT'Windsnelheid op ijmuiden',ijmuiden_wind_stoot VARCHAR DEFAULT NULL COMMENT'Windstoot op ijmuiden',ijmuiden_wind_richting VARCHAR DEFAULT NULL COMMENT'Windrichting op ij muiden」,ijmuiden_golf_hoogte VARCHAR DEFAULT NULL COMMENT 'golfhoogte運算艾默伊登',golf_periode VARCHAR DEFAULT NULL COMMENT 'golfperiode',watertemp VARCHAR DEFAULT NULL COMMENT 'watertemperatuur',luchttemp VARCHAR DEFAULT NULL COMMENT 'luchttemperatuur',PRIMARY KEY(id))ENGINE = InnoDB的默認字符集utf8註釋「緩存風浪數據」; db_create_table()中的Array()(位於/home/sitede01/domains/sitedezign.net/public_html/includes/database/database.inc的第2657行)。

回答

2

varchar類型的所有列都需要一個length屬性,如:

'luchttemp' => array(
    'description' => 'luchttemperatuur', 
    'type' => 'varchar', 
    'length' => 11 
) 

disp-width僅適用於非VARCHAR型列

+0

感謝克萊夫, 這並刪除錯誤但是它根本不創建數據庫表。 – Yorian

+0

這聽起來是正確的,現在模塊將處於不一致的狀態(即它認爲表已經安裝)。嘗試禁用您的模塊,然後轉到模塊頁面的「卸載」選項卡並將其完全卸載。然後返回模塊頁面並重新啓用它。如果仍然無法使用,請安裝[devel module](http://drupal.org/project/devel)並訪問'mysite.com/devel/reinstall',您可以在其中調用完整的模塊重新安裝 – Clive

+0

謝謝克萊夫,那就是訣竅! – Yorian