MySQL错误 - 字段' id'没有默认值

时间:2016-09-28 01:21:33

标签: mysql phpmyadmin create-table

我是这个SQL的新手,我想我还没完全理解它。我正在尝试安装一个脚本,该脚本执行以下操作以在数据库中插入create table

我得到的错误是:

  

错误!
  Mysql输入失败Field' fb_app_id'没有默认值。

所以我在文件中搜索并找到了创建该表的这段代码。

CREATE TABLE IF NOT EXISTS `global_config` (
  `site_name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `site_url` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `meta_description` text COLLATE utf8mb4_unicode_ci NOT NULL,
  `meta_keywords` text COLLATE utf8mb4_unicode_ci NOT NULL,
  `site_theme` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL,
  `fb_app_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL,
  `fb_app_secret` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL,
  `fb_app_token` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL,
  `fb_scope` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL,
  `tw_app_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL,
  `tw_app_secret` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL,
  `yt_client_id` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `yt_client_secret` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL,
  `yt_dev_token` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL,
 `fb_enabled` tinyint(1) NOT NULL,
  `tw_enabled` tinyint(1) NOT NULL,
  `yt_enabled` tinyint(1) NOT NULL,
  `ffmpeg` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL,
  `seo_url` tinyint(1) NOT NULL,
  `media_plugin_enabled` tinyint(1) NOT NULL,
  `downloader_plugin_enabled` tinyint(1) NOT NULL,
  `image_watermarking_enabled` tinyint(1) NOT NULL,
  `video_watermarking_enabled` tinyint(1) NOT NULL,
  `image_editor_enabled` tinyint(1) NOT NULL,
  `video_editor_enabled` tinyint(1) NOT NULL,
  `disable_all_crons` tinyint(1) NOT NULL,
  `disable_poster_cron` tinyint(1) NOT NULL,
  `disable_hide_delete_cron` tinyint(1) NOT NULL,
  `disable_insights_cron` tinyint(1) NOT NULL,
  `disable_videoeditor_bumping_cron` tinyint(1) NOT NULL,
  `enable_signup` tinyint(1) NOT NULL,
  `enable_maintenance_mode` tinyint(1) NOT NULL,
  `maintenance_message` text COLLATE utf8mb4_unicode_ci NOT NULL,
  `paypal_email` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL,
  `admin_email` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL,
  UNIQUE KEY `site_name` (`site_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

究竟是什么导致了这个问题,我该如何解决?

感谢所有帮助。

编辑:Index.php

$(document).on('click', '.app_setup', function(){

var elem = $(this);
var fb_app_id = $('#fb_app_id').val();
var fb_app_secret = $('#fb_app_secret').val();
var tw_app_id = $('#tw_app_id').val();
var tw_app_secret = $('#tw_app_secret').val();
var yt_client_id = $('#yt_client_id').val();
var yt_client_secret = $('#yt_client_secret').val();
var yt_dev_key = $('#yt_dev_key').val();

elem.hide();
notify('wait', 'Setting up...');
$.post('ajax.php', {
    'fb_app_id': fb_app_id,
    'fb_app_secret': fb_app_secret,
    'tw_app_id': tw_app_id,
    'tw_app_secret': tw_app_secret,
    'yt_client_id': yt_client_id,
    'yt_client_secret' : yt_client_secret,
    'yt_dev_key': yt_dev_key,
    'app_setup': 1
}, function(response){
    var data = $.parseJSON(response);
    if(data.error != ''){
        elem.show();
        return notify('error', data.error);
    }
    else{ 
        notify('success', 'App setup successful');
        $('.step3').slideUp();
        $('.step4').slideDown();
    }
});
});

1 个答案:

答案 0 :(得分:0)

我认为这不是导致错误的CREATE TABLE语句。

错误(很可能)是执行不为列提供值的INSERT语句。如果没有为列提供值,MySQL将使用列的默认值。

一种选择是修改表定义:

`fb_app_id` varchar(64) NOT NULL DEFAULT 'foo',

但是考虑到表中定义为NOT NULL的其他列的数量,可能只是将错误移动到下一列。在不检查INSERT语句的情况下,我们只是猜测哪种“修复”是最合适的。

作为示范:

CREATE TABLE my_t 
( id  INT UNSIGNED NOT NULL PRIMARY KEY
, foo VARCHAR(4)   NOT NULL
);

INSERT INTO my_t (id) VALUES (1); 
-- Error Code: 1364
-- Field 'foo' doesn't have a default value

INSERT INTO my_t (id,foo) VALUES (2,NULL); 
-- Error Code: 1048
-- Column 'foo' cannot be null

ALTER TABLE my_t CHANGE foo foo VARCHAR(4) NOT NULL DEFAULT NULL ;
-- Error Code: 1067
-- Invalid default value for 'foo'

ALTER TABLE my_t CHANGE foo foo VARCHAR(4) NOT NULL DEFAULT '';

INSERT INTO my_t (id) VALUES (3); 
-- 1 row(s) affected