Подтвердить что ты не робот

MySQL - Невозможно вставить значение NULL в столбец, но у меня задано значение по умолчанию?

У меня есть таблица в MySQL, у которой есть несколько столбцов с заданными значениями по умолчанию, но когда я пытаюсь вставить строку (не указывая значения для этих столбцов по умолчанию), она выдает ошибку, говоря, что я не могу вставить значения NULL.

Вот пример таблицы:

CREATE TABLE `users` (
  `Id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `UniqueName` varchar(120) NOT NULL,
  `Password` varchar(1000) NOT NULL,
  `PublicFlag` tinyint(1) NOT NULL,
  `NoTimesLoggedIn` int(10) unsigned NOT NULL DEFAULT '0',
  `DateTimeLastLogin` timestamp NOT NULL DEFAULT '1971-01-01 00:00:00',
  `UserStatusTypeId` int(10) unsigned NOT NULL,
  `Private` tinyint(1) NOT NULL DEFAULT '0',
  `SiteName` varchar(255) NOT NULL,
  `CountryId` int(10) NOT NULL DEFAULT '0',
  `TimeZoneId` varchar(255) NOT NULL DEFAULT 'UTC',
  `CultureInfoId` int(10) unsigned NOT NULL DEFAULT '0',
  `DateCreated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `UserCreated` int(10) unsigned NOT NULL,
  `LastUpdatedBy` int(10) unsigned NOT NULL,
  `DateLastUpdated` datetime DEFAULT NULL,
  PRIMARY KEY (`Id`),
  UNIQUE KEY `UniqueName_UNIQUE` (`UniqueName`),
  KEY `Index 3` (`SiteName`)
)

Он жалуется на TimeZoneId, и когда я заполняю TimeZoneId, он жалуется на CultureInforId.

Я использую MySQL Version: 5.1.43-community

Вот запрос вставки, который я пытаюсь вставить, схвачен из NHibernate Profiler:

INSERT INTO Users
           (UniqueName,
            Password,
            PublicFlag,
            NoTimesLoggedIn,
            DateTimeLastLogin,
            SiteName,
            TimeZoneId,
            DateCreated,
            DateLastUpdated,
            Private,
            CountryId,
            CultureInfoId,
            UserCreated,
            LastUpdatedBy,
            UserStatusTypeId)
VALUES     ('[email protected]','u1uhbQviLp89P9b3EnuN/Prvo3A4KVSiUa0=',1,
0,'1/01/1971 12:00:00 AM','V9O1T80Q6D',NULL,'2/08/2010 2:13:44 AM',
'2/08/2010 2:13:44 AM',0, NULL, NULL, 4, 4,31)
4b9b3361

Ответ 1

Вместо этого используйте ключевое слово DEFAULT:

INSERT INTO users (TimeZoneId) VALUES (DEFAULT);

Ответ 2

Не вставляйте значения NULL. Я предполагаю, что вы пытались использовать этот синтаксис:

INSERT INTO users VALUES (null, 'Jones', 'yarg', 1, null, null, null);

Вместо этого используйте этот синтаксис:

INSERT INTO users SET UniqueName='Jones', Password='yarg';

Для получения дополнительной информации см. Документы MySQL в INSERT.

Ответ 3

У вас есть "NOT NULL", установленный в полях, которые вы пытаетесь включить INSERT NULL.

например. CountryId, CultureInfoId, TimeZoneId

выполните следующее:

ALTER TABLE `users` MODIFY `CountryId` int(10) DEFAULT '0' NULL;
ALTER TABLE `users` MODIFY `CultureInfoId` int(10) unsigned DEFAULT '0' NULL;
ALTER TABLE `users` MODIFY `TimeZoneId` varchar(255) DEFAULT 'UTC' NULL;

EDIT: Не понял, что ему нужно значение по умолчанию вместо NULL на вставке "null". В принципе, как уже было предложено, используйте ключевое слово DEFAULT вместо NULL для значений.

ИЛИ оставить поля NULL и значения полностью, а mysql будет использовать определенные значения по умолчанию, например.

INSERT INTO Users
       (UniqueName,
        Password,
        PublicFlag,
        NoTimesLoggedIn,
        DateTimeLastLogin,
        SiteName,
        DateCreated,
        DateLastUpdated,
        Private,
        UserCreated,
        LastUpdatedBy,
        UserStatusTypeId)
VALUES     ('[email protected]','u1uhbQviLp89P9b3EnuN/Prvo3A4KVSiUa0=',1,
0,'1/01/1971 12:00:00 AM','V9O1T80Q6D','2/08/2010 2:13:44 AM',
'2/08/2010 2:13:44 AM',0, 4, 4,31)

Ответ 4

В качестве альтернативы использованию ключевого слова DEFAULT вы также можете просто не указывать значения для полей, которые вы хотите иметь значения по умолчанию. Например, если вы просто удалили TimeZoneId, CountryId и CultureInfoId из своего запроса, все эти столбцы автоматически получат значения по умолчанию:

INSERT INTO Users
    (UniqueName,
    Password,
    PublicFlag,
    NoTimesLoggedIn,
    DateTimeLastLogin,
    SiteName,
    DateCreated,
    DateLastUpdated,
    Private,
    UserCreated,
    LastUpdatedBy,
    UserStatusTypeId)
VALUES
    ('[email protected]','u1uhbQviLp89P9b3EnuN/Prvo3A4KVSiUa0=',1,0,
    '1/01/1971 12:00:00 AM','V9O1T80Q6D','2/08/2010 2:13:44 AM',
    '2/08/2010 2:13:44 AM',0,4,4,31)

Я не уверен, как это работает в контексте NHibernate, поскольку эта часть вопроса не совсем понятна.

Ответ 5

TimeZoneId varchar(255) NOT NULL DEFAULT 'UTC', CultureInfoId` int (10) unsigned NOT NULL DEFAULT '0',

Для этих полей вы установили ограничения как "Not Null", и, следовательно, введенные значения не могут быть нулевыми и, следовательно, либо изменить структуру таблицы, либо просто не указывать значения для полей, которые вы хотите иметь значения по умолчанию.