Autor Zpráva
PetraPP
Profil
Ahojte,
vkládám do mySQL data a nejdou mně vložit. V mySQL mám ID jako INT a když přes INSERT do něj nic nevložím "", tak se neuloží. Jak mohu mySQL nastavit na straně serveru, aby to ukládat šlo a do mySQL se uložila nula "0". Když tam totiž dám výchozí nulu v mySQL, tak to stále nechce uložit.
lionel messi
Profil
PetraPP:

Zdravím,

v zásade mám pocit, že by sa mi hodilo trošku viac informácií, napr. čo znamená „tak to stále nechce uložit.“ – zjavne to hlási nejakú chybu.

V princípe si treba uvedomiť, že ak má stĺpec nastavený AUTO_INCREMENT (čo číselné stĺpce s pomenovaním ID často majú), tak nemôže mať explicitne nastavený DEFAULT (predvolenú hodnotu) na 0, pretože pracuje s tzv. implicitným DEFAULT (predvolená hodnota je rovná nasledujúcemu číslu v sekvencii) – slúžia ako primárne, resp. unikátne kľúče.

Ak stĺpec AUTO_INCREMENT nemá, treba mu nastaviť DEFAULT takto:

ALTER TABLE `tabulka` CHANGE `id` `id` INT(11) NOT NULL DEFAULT 0;

A pri INSERTe je zrejme najčistejšie riešenie takýto stĺpec vôbec neuvádzať, čiže:

INSERT INTO `tabulka` (`zeme`, `pocet_obyvatel`) VALUES ('Česko', 10.65), ('Slovensko', 5.45)

Česko aj Slovensko budú mať automaticky id 0.
PetraPP
Profil
Jakým příkázem v mySQL zjistím nastavení? Některé mySQL databáže vkládaji nulu automaticky. Chtěla bych to nastavit globálně. Mám tam snad stovku souborů :(
Keeehi
Profil
Jakým příkázem v mySQL zjistím nastavení?
Například pomocí
SHOW CREATE TABLE `tabulka`

Jak s databází pracuješ? Máš na to nějaký klikací nástroj, třeba Adminer, že?
PetraPP
Profil
Spíše mně jde o nastavení mySQL, tedy něco jako (sql-mode), abych dostala například: "NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLE,NO_AUTO_CREATE_USER".
Mockrát děkuji.
Kajman
Profil
SELECT @@sql_mode

případně
SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;
Rosik
Profil
Mám stejný problém. Řešení v odpovědích není.
Mám např. tabulku "bazar", kde jsou 2 sloupce "kod" s datovým typem varachar(8) a "pocet" s datovým typem int(11). Na starém hostingu mi stačilo:
INSERT INTO bazar ('kod','pocet') VALUES ('triko','');
k tomu, aby se do sloupce počet vložila nula. Nyní tam musím tu nulu napsat:
INSERT INTO bazar ('kod','pocet') VALUES ('triko','0');
jinak to hlásí chybu: Incorrect integer value....
Na starém hostingu mám starší verzi MySQL 5.1.73 na novém už je MariaDB 10.3.17.
Dá se to nějak obejít nebo musím tu nulu do těch dotazů psát? Pokud ano, je to trochu komplikované, protože, když mi vrátí webový formulář číselnou nulu, pak proměnou musím nastavit jako integer, aby se mi napsala do sql dotazu. Pokud to neudělám, pak se mi proměnná nevypíše jako nula, ale jako prázdný řetězec.
Díky za doporučení!
Ikki
Profil
Dej si tam AUTO_INCREMENT na id. A příště zkus vlastní příspěvek ať je to lépe dohledatelne.
Rosik
Profil
Ikki:
Ale můj příspěvek není o id a AUTO_INCREMENT, ale o běžné položce s číselnou hodnotou typu integer nebo float a reaguje na první příspěvek v tomto vlákně - upřesnění problému.
Kajman
Profil
Osobně bych dotazy opravil, ale mohlo by jít i nastavit přes sql_mode, aby to takové chyby ignorovalo. Jen si nejsem jistý, která volba to ovlivňuje.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0