我是这个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();
}
});
});
答案 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