INT UNSIGNED määritelmän null arvo?

Eli miten asia meneekään...

Olen PHP:llä tehnyt tietokantasovellusta joka käyttää MySQL-tietokantaa. Taulun luontivaiheessa olen määritellyt parille kentälle määritelmän INT UNSIGNED ja TINYINT UNSIGNED. Nyt jos näihin sarakkeisiin ei tallenneta mitään tietoa niin tietokantaan tulee 0 (nolla) kyseisille kohdille.

Miten saan määritettyä, että jos vaikkapa INT UNSIGNED kenttään ei tallenneta mitään tietoa niin defaulttina se on sitten tyhjä eikä nolla?

6

857

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • .........h

      Suoritappas tämmöinen kysely

      ALTER TABLE taulusi CHANGE sarakkeesi sarakkeesi INT UNSIGNED NULL DEFAULT NULL

      Ja tuosta sit muuttelet INT kohdan vastaamaan sarakkeen tyyppiä, tosin jos sulla on käytässä phpMyAmin(tai muu tietokannan hallinta ohjelma) niin sillä muutos on paljon helpompaa ja turvallisempaa, koska ei tarvitse itse noita kyselyitä kirjoittaa, tosin MySQL aikapitkälle estää virheelliset kyselyt.

      Valitse taulu -> rakenne -> paina sarakkeen kohdalla kynä(muokkaa) kuvaketta -> oletusarvo kohtaan vain NULL -> tallenna

    • .........

      Suoritappas tämmöinen kysely

      ALTER TABLE taulusi CHANGE sarakkeesi sarakkeesi INT UNSIGNED NULL DEFAULT NULL

      Ja tuosta sit muuttelet INT kohdan vastaamaan sarakkeen tyyppiä, tosin jos sulla on käytässä phpMyAmin(tai muu tietokannan hallinta ohjelma) niin sillä muutos on paljon helpompaa ja turvallisempaa, koska ei tarvitse itse noita kyselyitä kirjoittaa, tosin MySQL aikapitkälle estää virheelliset kyselyt.

      Valitse taulu -> rakenne -> paina sarakkeen kohdalla kynä(muokkaa) kuvaketta -> oletusarvo kohtaan vain NULL -> tallenna

      • xxxxxxxxxxxxxxxxxxxx

        Kävin vielä phpmyadminin kautta tarkastamassa että siellä oli kentän kohdalla NULL ja oletusarvona NULL.

        Löytyisikö muuta ratkaisua?

        Vai pitääkö tehdä purkkaratkaisu ja estää PHP-koodissa negatiiviset luvut ja kirjata tyhjät luvut sitten vaikkapa -1.


      • .........
        xxxxxxxxxxxxxxxxxxxx kirjoitti:

        Kävin vielä phpmyadminin kautta tarkastamassa että siellä oli kentän kohdalla NULL ja oletusarvona NULL.

        Löytyisikö muuta ratkaisua?

        Vai pitääkö tehdä purkkaratkaisu ja estää PHP-koodissa negatiiviset luvut ja kirjata tyhjät luvut sitten vaikkapa -1.

        Kyl tuon pitäis toimia, teit jotakin väärin, mitenkäs lisäsit tietoa?

        CREATE TABLE testi (
        id tinyint(4) NOT NULL AUTO_INCREMENT,
        x int(11) NOT NULL,
        y tinyint(4) DEFAULT NULL,
        PRIMARY KEY (id)
        ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

        INSERT INTO testi (x) VALUES (222);
        INSERT INTO testi (x,y) VALUES (222, NULL);
        INSERT INTO testi (x,y) VALUES (222, ' ');
        INSERT INTO testi (x,y) VALUES (222, 0);
        INSERT INTO testi (x,y) VALUES (222, 'NULL'); (error)
        INSERT INTO testi (x,y) VALUES (222, ''); (error)

        SELECT * FROM testi;
        id | x | y
        1 | 222 | NULL
        2 | 222 | NULL
        3 | 222 | 0
        4 | 222 | 0

        Ja älä ala kikkailemaan -1 = NULL tai vastaavaa siitä seuraa ongelmia sekä koodistasi tulee epäselvempää koska -1 ei ole -1 vaan jotain ihan muuta.


      • x_x_x_x_x__x__X__x__X
        ......... kirjoitti:

        Kyl tuon pitäis toimia, teit jotakin väärin, mitenkäs lisäsit tietoa?

        CREATE TABLE testi (
        id tinyint(4) NOT NULL AUTO_INCREMENT,
        x int(11) NOT NULL,
        y tinyint(4) DEFAULT NULL,
        PRIMARY KEY (id)
        ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

        INSERT INTO testi (x) VALUES (222);
        INSERT INTO testi (x,y) VALUES (222, NULL);
        INSERT INTO testi (x,y) VALUES (222, ' ');
        INSERT INTO testi (x,y) VALUES (222, 0);
        INSERT INTO testi (x,y) VALUES (222, 'NULL'); (error)
        INSERT INTO testi (x,y) VALUES (222, ''); (error)

        SELECT * FROM testi;
        id | x | y
        1 | 222 | NULL
        2 | 222 | NULL
        3 | 222 | 0
        4 | 222 | 0

        Ja älä ala kikkailemaan -1 = NULL tai vastaavaa siitä seuraa ongelmia sekä koodistasi tulee epäselvempää koska -1 ei ole -1 vaan jotain ihan muuta.

        eli php-koodissa kun tietoja lisätään tietokantaan niin VALUES-kohdan jälkeen on minulla kaikki arvot hipsujen sisällä eli tyyliin:
        ... VALUES ('$value1', 'value2', 'value3', ...)

        Nyt kun kokeilin lisätä suoraan tuonne NULL ilman hipsuja niin juttu toimii. Mutta mitenkäs tuota lisäystä voi nyt muuttaa niin, että se toimisi oikein, kun hipsuja ei voi poistaa ympäriltä jos arvo != NULL?


      • .........
        x_x_x_x_x__x__X__x__X kirjoitti:

        eli php-koodissa kun tietoja lisätään tietokantaan niin VALUES-kohdan jälkeen on minulla kaikki arvot hipsujen sisällä eli tyyliin:
        ... VALUES ('$value1', 'value2', 'value3', ...)

        Nyt kun kokeilin lisätä suoraan tuonne NULL ilman hipsuja niin juttu toimii. Mutta mitenkäs tuota lisäystä voi nyt muuttaa niin, että se toimisi oikein, kun hipsuja ei voi poistaa ympäriltä jos arvo != NULL?

        Juu ei hipsuja numerotyyppisten tietojen ympärille, jos hipsut on numeron ympärillä niin se on silloin merkkijono ei numero, tietokanta tosin muuttaa sen takaisin numeroksi, turhaa työtä vain.

        Helpoin ja hyvin tapa on tehdä tehdä http://fi.php.net/manual/en/function.PDOStatement-execute.php Esimerkki 1699 (jostain syystä PHP-manuaalista saa joskus vanhaa versiota, tuo ei ole enään eksperimentaalinen). MySQLi functio sisältää myös tuommoisen, mutta PDO kannattaa ennemmin käyttää kun ei ole sidottu pelkkään MySQL.

        Mikäli sinulla on vanha PHP tai pystyt käyttämään vain MySQL functiota niin voit tehdä oman function mielummin luokka joka hoitaa tuon asian, esim.


        function x($data)
        {
           if (strlen($data) == 0) {
              return 'NULL';
           }
           elseif (is_numeric($data)) {
              return $data;
           }
           else {
              return "'" . mysql_real_escape_string($data) . "'";      
           }
        }

        $value1 = x($_GET['testi']);

        Tuo functio palauttaa tyhjällä NULL(merkkijono), numeroilla numeron, muutoin hipsutetun ja escapetetun merkkijonon.

        Tietenkin kannattaa miettiä tuon laajentamista että söisi valinnaisen toisen parametrin millä pystyisi antamaan jotain ehtoja, ettei turhaan yritetä INT tyyppiseen soluun viedä tekstiä jne...

        Tai sitten vaan ihan
        if (!$y) {
        INSERT INTO testi (x) VALUES (222);
        }
        else
        {
        INSERT INTO testi (x, y) VALUES (222, $y);
        }

        Paljon ratkasee mitä olet tekemässä ja mikä siihen parhaiten soveltuu.


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Riikka Purran kaudella nousi bensan hinta yli 2 euron

      Muistatteko kuinka edellisen vasemmistohallituksen aikana, ns. Marinin aikakaudella, bensiiniä sai 1,3 euron litrahinnal
      Maailman menoa
      125
      4771
    2. Veli Sofia teki urosmehiläisen työn

      Paljastaessaan kuinka TPS:ssä ei joukkuehenki toimi sooloilijoiden vuoksi, jonka takia koko seura ei pärjää kilpailussa
      Maailman menoa
      5
      3402
    3. Mitäs nyt sijoittajat?

      Pörssit laskevat maailmalla Iranin sodan takia ja muutenkin ovat olleet Trumpin vallan alla epävarmat. Ainoa, mikä on no
      Maailman menoa
      128
      3210
    4. Hjallis Harkimon, 72, Jasmine-rakas, 37, paljastaa suhteen alusta: "Vähän..."

      Liikemies, kansanedustaja Hjallis Harkimo ja tuottaja-juontaja Jasmine Pajari ovat pariskunta. He asuvat yhdessä Sipooss
      Suomalaiset julkkikset
      26
      2637
    5. Unisex-vessat

      Ahdistaa. Miksi kaikki pitää tasapäistää tasa-arvon nimissä? Tasa-arvo on sitä, että kunnioitetaan sukupuolien erilaisu
      Tunteet
      75
      2372
    6. Jutta Larm, 52, haluaa kumota tämän piintyneen ikämyytin

      Oletko samaa mieltä? Jutta Larm on 52-vuotias ja tehnyt pitkän uran yrittäjänä. Hän haluaa kumota tämän piintyneen ikämy
      50 plus
      18
      1779
    7. Henri Alen tilittää yllättäen Vappu Pimiän uudesta MasterChef -pestistä: "Vaikka hän ei..."

      Vappu Pimiä on uusi MasterChef Suomi -tuomari. Hän liittyi uudella MasterChef Suomi -kaudella arvovaltaiseen tuomaristoo
      Suomalaiset julkkikset
      9
      1404
    8. Vastuun ottaminen omasta hyvinvoinnista

      Olen huomannut tuttavapiirissäni ihmisiä, joilla on mt-diagnooseja. Sen sijaan, että millekään asialle yritettäisiin teh
      117
      1265
    9. Minkä kouluarvosanan 4-10 annat Beck-leffoille?

      Vähiin käy ennen kuin loppuu... Beck-elokuvia on tullut tv:stä jopa 2-3 viikossa. Nyt leffojen esitystiheys on muuttunut
      Elokuva
      9
      1233
    10. Jäit kiinni siitä

      että katselet minua. Käänsin pääni, minäkin etsin sinua, ja meidän katseemme kohtasivat. Eikä se haittaa - molemmat ky
      Ikävä
      4
      1148
    Aihe