Wartości NULL w komendzie INSERT

0

Poproszę o pomoc bo jestem niebyt zaawansowanym użytkownikiem SQL-a
Dotychczas używając komendy INSERT wstawiałem wartości NULL (konkretnie "" czyli nic) w pola decimal i date. SQL dla pól decimal zamieniał to na zero a dla pól DATE na 0000-00-00. Zmieniłem serwer i dostaję teraz dostaję komunikat "#1366 - Incorrect decimal value" lub "#1292 - Incorrect date value" lub "#1366 - Incorrect integer value". Czy można w serwerze ustawić coś aby on sam sobie zmieniał wartości na zero lub 0000-00-00?

5

Jaki serwer na jaki zmieniłeś?
BTW nie prościej wpisywać '0' lub '0000-00-00' zamiast wymagać automatycznej konwersji?
BTW2 '0', NULL i "" (pusty string) to ogólnie różne wartości. Chociaż na oracle NULL i pusty string to to samo, jeśli dobrze pamiętam, ale to jedna z patologii oracle

0
KamilAdam napisał(a):

Jaki serwer na jaki zmieniłeś?
BTW nie prościej wpisywać '0' lub '0000-00-00' zamiast wymagać automatycznej konwersji?
BTW2 '0', NULL i "" (pusty string) to ogólnie różne wartości. Chociaż na oracle NULL i pusty string to to samo, jeśli dobrze pamiętam, ale to jedna z patologii oracle

najpierw XAMPP 10.1.19-MariaDB - mariadb.org binary distribution, Apache/2.4.23 (Win32) OpenSSL/1.0.2h PHP/7.0.13
a teraz LAMPP 10.4.27-MariaDB - Source distribution, Apache/2.4.54 (Unix) OpenSSL/1.1.1s PHP/8.2.0 mod_perl/2.0.12 Perl/v5.34.1

1

@Maxbert: Przy tworzeniu tabeli możesz dodać do pola DEFAULT. Mówiąc to, prosiłbym byś dodał więcej kodu. Najlepiej kod jak robisz create table i ten insert. Możesz wykorzystać https://www.db-fiddle.com/

0

@Maxbert:

Zmiana serwerów jest bardzo mało znacząca.

Problem jest w twoim kodzie - którego nie znamy. Zamiast epopei narodowej "o kodzie" daj kod.

ps. użyłeś tagu SQL (zwyczajowo) zwiazanego z Microsoft SQL

0
AnyKtokolwiek napisał(a):

@Maxbert:

Zmiana serwerów jest bardzo mało znacząca.

Problem jest w twoim kodzie - którego nie znamy. Zamiast epopei narodowej "o kodzie" daj kod.

ps. użyłeś tagu SQL (zwyczajowo) zwiazanego z Microsoft SQL

Nie wykonuję komendy CREATE bo tabela/tabele przeniosły się wraz z back-upem. A INSERT jest najprostszy z możliwych np. taki:
INSERT INTO wagi VALUES (null,'MXB545B243', '', '', '','10','','','M','0625LNCXXXXXXXXXXXX412','5AC0001LCKUC1LC0001LC0001LC00044C0001ZCWW11ZCWW2','Box','CHROM','','','','2023-05-05','MG','','')
jak pouzupełniam pola "" wartościowymi 0 lub 0000-00-00 jest wszystko OK ale wolałbym tego nie robić ze względu na ilość plików które musiałbym poprawić.
screenshot-20230505161800.png

3
AnyKtokolwiek napisał(a):

Zmiana serwerów jest bardzo mało znacząca.

Tu akurat nie masz racji bo to podniesienie wersji 10.1-> 10.4 akurat w tej kwesti sporo zmienia.

Mam na myśli SQL_MODE która w wersji źródłowej była pusta, a teraz ma prawdopodobnie domyślne wartości:

STRICT_TRANS_TABLES, ERROR_FOR_DIVISION_BY_ZERO , NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION

https://dbfiddle.uk/LyhmdmKM

@Maxbert

Pozostaje Ci albo użyć

SET sql_mode = '';

albo poprawić zapytania tak aby działały, czyli faktycznie wstawiać null co osobiście zalecam

1 użytkowników online, w tym zalogowanych: 0, gości: 1