MySQL升级后为什么不能在列中插入NULL值?

Tom*_*asz 2 php mysql

升级我的mysql后我遇到数据库问题.在日志中,我可以看到:

PHP致命错误:未捕获PDOException:SQLSTATE [23000]:完整性约束违规:1048列'kod_tecdoc'不能为空.

当我尝试在表中插入或更新行时.升级工程之前,我很惊讶.我的表字段允许清空值.我知道解决方案可能是

if($ kod_tecdoc == null)$ kod_tecdoc ='';

但它没有解决问题.也许应该在mysql中更改一些设置?
我的mysql版本:

+-----------------+
| @@version       |
+-----------------+
| 5.7.12-0ubuntu1 |
+-----------------+
Run Code Online (Sandbox Code Playgroud)

表结构

 CREATE TABLE `Realizacje` (
      `id` int(11) NOT NULL,
      `tekst_allegro` text NOT NULL,
      `typy_felg` int(11) NOT NULL,
      `nazwa` varchar(200) DEFAULT NULL,
      `nazwa_allegro` varchar(255) NOT NULL,
      `producent` int(11) NOT NULL DEFAULT '0',
      `cena_netto_gielda` decimal(12,2) NOT NULL,
      `cena_brutto_gielda` decimal(12,2) NOT NULL,
      `cena_netto_hurt` decimal(12,2) NOT NULL,
      `cena_brutto_hurt` decimal(12,2) NOT NULL,
      `cena_netto_warsztat` decimal(12,2) NOT NULL,
      `cena_brutto_warsztat` decimal(12,2) NOT NULL,
      `vat` int(11) NOT NULL,
      `kod_produkt` varchar(255) NOT NULL,
      `on_pojazdy` varchar(1) NOT NULL DEFAULT '0',
      `on_zamienniki` varchar(1) NOT NULL DEFAULT '0',
      `on_kategoria` varchar(1) NOT NULL DEFAULT '0',
      `kod` varchar(255) NOT NULL,
      `kod_dostawcy` varchar(50) NOT NULL,
      `kod_tecdoc` varchar(50) NOT NULL,
      `widoczny` varchar(2) NOT NULL DEFAULT '1',
      `dostepny` varchar(2) NOT NULL DEFAULT '1',
      `dostepnosc` int(11) NOT NULL,
      `promocja` varchar(2) NOT NULL DEFAULT '0',
      `promocja_glowna` tinyint(1) NOT NULL DEFAULT '0',
      `nowosc` varchar(2) NOT NULL DEFAULT '0',
      `nowosc_glowna` tinyint(1) NOT NULL DEFAULT '1',
      `glowna` varchar(1) NOT NULL,
      `bestseller` varchar(1) DEFAULT '0',
      `bestseller_glowna` tinyint(1) NOT NULL DEFAULT '0',
      `polecamy` varchar(1) NOT NULL DEFAULT '0',
      `polecamy_glowna` varchar(1) NOT NULL DEFAULT '0',
      `skrot` text NOT NULL,
      `tekst` text,
      `odwiedziny` bigint(20) DEFAULT '0',
      `lang` varchar(5) NOT NULL DEFAULT 'pl',
      `status` int(11) DEFAULT '0',
      `link` varchar(255) DEFAULT NULL,
      `route_id` int(11) DEFAULT NULL,
      `miary` int(11) NOT NULL,
      `rabat` decimal(12,2) NOT NULL,
      `narzut` varchar(1) DEFAULT '0',
      `aukcje` varchar(255) NOT NULL,
      `stan` decimal(12,2) NOT NULL DEFAULT '1.00',
      `aktualizowany` varchar(1) NOT NULL DEFAULT '1',
      `dostawanatelefon` varchar(1) NOT NULL,
      `dodano` varchar(50) DEFAULT NULL,
      `aktualizacja` varchar(50) DEFAULT NULL,
      `kosztyAllegro` text NOT NULL,
      `allegroCennik` int(11) NOT NULL,
      `trybCena` varchar(255) NOT NULL,
      `allegro_ok` varchar(1) NOT NULL DEFAULT '0',
      `ogranicz_ilosc_znakow` int(11) NOT NULL DEFAULT '50'
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)

Oli*_*vic 6

您的本地MySQL服务器正在以"严格"模式运行,这会在您的情况下引发错误,而其他几个服务器会在没有严格模式的情况下"优雅地"处理.从MySQL 5.7.5开始,默认的SQL模式包括STRICT_TRANS_TABLES,这正是你头痛的原因.

要更改本地服务器的模式,请编辑my.cnf(如果您运行的是Windows,则编辑my.ini)并将模式设置为:

sql-mode=""

或者,在Web应用程序中连接到MySQL后,请在建立连接后立即执行此查询:

SET GLOBAL sql_mode = '';

我建议不要这样做,因为它可以让你执行一些粗心的陈述.从长远来看,你最好调整你的架构.