Portál AbcLinuxu, 21. říjen 2017 07:14

Dotaz: Možno bug v MariaDB

7.3. 20:09 Peter
Možno bug v MariaDB
Přečteno: 476×
Odpovědět | Admin
Příloha:
Dobrý deň vám prajem.

Robím si aplikáciu na faktúry a narazil som na zaujímavú chybu v MariaDB. Na notebooku mám Fedora 25 a MariaDB 10.1.21 a insert jednej položky neprejde, respektíve prejde bez chyby, ale nič sa nevloží
insert into invoice (id_contact) values ('1');
Bolo vložených 0 riadkov. (Dopyt zabral 0.0005 sekúnd.)
Čiže v podstate pre databázu je všetko v poriadku, len nevloží nič, ale zato takéto niečo funguje a aj vloží záznam:
insert into invoice values (null,'1','0000-00-00','0000-00-00','0','0000-00-00','0','0','0','0000-00-00','0','0','0','','','');
Bol vložený 1 riadok.
Vložený riadok id: 1 (Dopyt zabral 0.0005 sekúnd.)
Pravdepodobne je problém s cudzími kľúčmi, lebo na tabuľke bez nich funguje aj skrátený zápis. Na MySQL 5.7.17 všetko funguje ako má.

Kompletná databáza je priložená v prílohe.

Mám chybu niekde ja, alebo je to chyba v MariaDB?

Za pomoc vám vopred veľmi pekne ďakujem.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

8.3. 12:43 Roman DAVID | skóre: 24 | Brno
Rozbalit Rozbalit vše Re: Možno bug v MariaDB
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zdravim, v tabulce invoice nastavte následujícím sloupcům výchozí hodnoty:
`delivery_date` 
 `maturity_date`
`invoice_date` 
`prefix` 
`suffix` 
`comment`
Pak to bude fungovat. Funkční struktura tabulky vypadá takto:
CREATE TABLE `invoice` (
  `id` int(10) UNSIGNED NOT NULL,
  `id_contact` int(10) UNSIGNED NOT NULL,
  `delivery_date` date DEFAULT NULL,
  `maturity_date` date DEFAULT NULL,
  `invoice` tinyint(1) NOT NULL,
  `invoice_date` date DEFAULT NULL,
  `invoice_year` int(4) UNSIGNED NOT NULL,
  `invoice_number` int(6) UNSIGNED NOT NULL,
  `cancel` tinyint(1) NOT NULL,
  `cancel_date` date NOT NULL,
  `cancel_year` int(4) UNSIGNED NOT NULL,
  `cancel_number` int(6) UNSIGNED NOT NULL,
  `price` decimal(12,2) NOT NULL,
  `prefix` text,
  `suffix` text,
  `comment` text
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Pokud máte pro typ 'date' nastaveno NOT NULL, tak DB neví co tam má dát, když mu neposkytnete validní datum
v rámci SQL dotazu "insert into...". To stejné z nějakého důvodu platí i pro typ 'text'.
8.3. 15:21 chrono
Rozbalit Rozbalit vše Re: Možno bug v MariaDB
Tie prázdne stĺpce sa riešia v TRIGGER `invoice:before_insert` (netuším, prečo nie je použitá DEFAULT hodnota priamo pri vytváraní tabuľky), takže to asi problém nebude.
8.3. 16:42 Roman DAVID | skóre: 24 | Brno
Rozbalit Rozbalit vše Re: Možno bug v MariaDB
Protože žádnou DEFAULT nemáte nastavenou !

Máte jen "NOT NULL" , ale chybí default.

Právě na těch triggerech to pohoří.

Mimochode, zkoušel jste to s mnou navrhovanou strukturou ?

Mě to po těchto upravách funguje.

A když už mi nevěříte, tak si po insertu následně dejte SHOW WARNINGS;

Pokud vás ani to nepřesvědčí, tak už pak nevím.....
8.3. 21:03 jekub
Rozbalit Rozbalit vše Re: Možno bug v MariaDB
a proc by to chrono zkousel, jeho problem to neni.
8.3. 21:18 jekub
Rozbalit Rozbalit vše Re: Možno bug v MariaDB
Funkční struktura tabulky vypadá takto:

ta puvodni je snad nefunkcni?

Pokud máte pro typ 'date' nastaveno NOT NULL, tak DB neví co tam má dát

kdyz nevi, tak null. Sloupec je not null, ergo chyba.
10.3. 20:49 Ivan2 | skóre: 4
Rozbalit Rozbalit vše Re: Možno bug v MariaDB
<flame > Jeden by ocekaval, ze to napise neco jako "integrity violation error", nebo tak neco. Ale ono jen nic nevlozi. </flame >

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.