Таблица не создается со значениями DEFAULT

Я хочу создать таблицу с именем review с некоторыми DEFAULT, как показано в следующем коде:

mysqli_query($link, "CREATE TABLE IF NOT EXISTS `review` (
`clients_id` int(15) NOT NULL AUTO_INCREMENT,
`client_id` varchar(150) NOT NULL DEFAULT '',
`rating` tinyint(2) NOT NULL DEFAULT '0',
`proj_date` date NOT NULL DEFAULT '0000-00-00',
`proj_desc` text NOT NULL DEFAULT '',
`photoname` text NOT NULL,
`companyname` text NOT NULL,
`feedback` text NOT NULL,
`status` tinyint(1) NOT NULL DEFAULT '0',
`emailid` varchar(100) NOT NULL DEFAULT '',
`customratings` varchar(100) NOT NULL DEFAULT '',
`photo_option` varchar(100) NOT NULL DEFAULT '',
`title` varchar(100) NOT NULL DEFAULT '',
`citation` varchar(100) NOT NULL DEFAULT '',
`date_option` varchar(100) NOT NULL DEFAULT '',
`rating_option` varchar(100) NOT NULL DEFAULT '',
PRIMARY KEY (`clients_id`),
FULLTEXT KEY `feedback` (`feedback`)
) ENGINE=MyISAM  AUTO_INCREMENT=1") or mysqli_error($link);

Столбцы этой таблицы должны содержать значения DEFAULT, но при записи таблица значений DEFAULT не создается.

Теперь я заменил свой код, удалив значения DEFAULT следующим образом:

mysqli_query($link, "CREATE TABLE IF NOT EXISTS `review` (
`clients_id` int(15) NOT NULL AUTO_INCREMENT,
`client_id` varchar(150) NOT NULL,
`rating` tinyint(2) NOT NULL,
`proj_date` date NOT NULL,
`proj_desc` text NOT NULL,
`photoname` text NOT NULL,
`companyname` text NOT NULL,
`feedback` text NOT NULL,
`status` tinyint(1) NOT NULL,
`emailid` varchar(100) NOT NULL,
`customratings` varchar(100) NOT NULL,
`photo_option` varchar(100) NOT NULL,
`title` varchar(100) NOT NULL,
`citation` varchar(100) NOT NULL,
`date_option` varchar(100) NOT NULL,
`rating_option` varchar(100) NOT NULL,
PRIMARY KEY (`clients_id`),
FULLTEXT KEY `feedback` (`feedback`)
) ENGINE=MyISAM  AUTO_INCREMENT=1") or mysqli_error($link);

Теперь таблица создается идеально, и если продолжить эту (без значений по умолчанию) таблицу, я получаю 1364 MySQL error при вставке данных

Я временно исправил это с mysql error 1364 Поле не имеет значений по умолчанию удалив STRICT_TRANS_TABLES моей настройки sqlmode в phpmyadmin

Я также попытался сначала создать таблицу, а затем ДОБАВИТЬ к ней по умолчанию, используя ALTER TABLE, но это можно сделать только один раз, что не подходит для длинной базы данных.

Но я не хочу менять настройки phpmyadmin и создавать таблицу со значениями столбцов DEFAULT. Как я могу это сделать и где я делаю неправильно?

Спасибо

Наваз Гори

0

Решение

Есть несколько проблем с SQL. Во-первых, вы пытаетесь установить недопустимую дату по умолчанию («0000-00-00» не является допустимой датой). Также с текстовыми полями, почему для него установлено значение по умолчанию », вы не можете установить значение по умолчанию для нескольких типов полей — текст является одним из них (https://dev.mysql.com/doc/refman/5.7/en/data-type-defaults.html).

ТАК…

CREATE TABLE IF NOT EXISTS `review` (
`clients_id` int(15) NOT NULL AUTO_INCREMENT,
`client_id` varchar(150) NOT NULL DEFAULT '',
`rating` tinyint(2) NOT NULL DEFAULT '0',
`proj_date` date NOT NULL DEFAULT '1900-01-01',
`proj_desc` text NOT NULL,
`photoname` text NOT NULL,
`companyname` text NOT NULL,
`feedback` text NOT NULL,
`status` tinyint(1) NOT NULL DEFAULT '0',
`emailid` varchar(100) NOT NULL DEFAULT '',
`customratings` varchar(100) NOT NULL DEFAULT '',
`photo_option` varchar(100) NOT NULL DEFAULT '',
`title` varchar(100) NOT NULL DEFAULT '',
`citation` varchar(100) NOT NULL DEFAULT '',
`date_option` varchar(100) NOT NULL DEFAULT '',
`rating_option` varchar(100) NOT NULL DEFAULT '',
PRIMARY KEY (`clients_id`),
FULLTEXT KEY `feedback` (`feedback`)
) ENGINE=MyISAM  AUTO_INCREMENT=1

работает.

НО — вы можете установить определенную дату для proj_date,

1

Другие решения

Это не сохранение в базе данных определенно, потому что поле column_name (и, возможно, некоторые другие) отмечен как «НЕ NULL». Это означает, что значение этого поля должно быть чем-то отличным от NULL (NULL — нет данных вообще)

Это означает, что у вас есть 2 варианта:

Пометьте ваше поле как NULL (сначала проверьте, должно ли ваше поле иметь какое-либо значение или нет).

ALTER TABLE your_table CHANGE COLUMN your_field your_field VARCHAR(250) NULL;
Добавьте значение по умолчанию в поле, чтобы, если на вставке не было данных, в нее было добавлено то, что вы определили. Например:

ALTER TABLE your_table CHANGE COLUMN your_field your_field VARCHAR(250) NOT NULL DEFAULT 'some_default_value';

И, конечно же, сопоставьте тип вашего поля с полем, которое вы собираетесь изменить.

1

одной из проблем может быть то, что у вас есть с первым блоком:

`rating` tinyint(2) NOT NULL DEFAULT '0',
....
`status` tinyint(1) NOT NULL DEFAULT '0',

вместо этого вам нужно иметь 0 без цитаты:

............................ DEFAULT 0,

Кроме того, значения по умолчанию не установлены для некоторых столбцов, также установите значения по умолчанию для них.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector