Wartości NULL w komendzie INSERT

Wartości NULL w komendzie INSERT
MA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3
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?

KamilAdam
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Silesia/Marki
  • Postów: 5579
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

MA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3
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

DR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1135
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/

AK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3561
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

MA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3
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

PA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3895
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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.