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?
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
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
@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/
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
AnyKtokolwiek napisał(a):
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ć.
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
Pozostaje Ci albo użyć
SET sql_mode = '';
albo poprawić zapytania tak aby działały, czyli faktycznie wstawiać null
co osobiście zalecam