Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Differenza tra NULL attivato o no

    Non ho capito bene quando si crea un nuovo campo che differenza c'è tra dire che può essere NULL oppure negare il NULL perchè ad intuito capisco che se non può essere NULL bisogna per forza inserirci qualcosa ma poi di fatto se guardo molte tabelle nei campi NOT NULL spesso non c'è niente. La cosa che più mi preme è sapere se funzionano gli INSERT quando non si inserisce niente in un campo NOT NULL, perchè siccome devo creare una tabella non vorrei che poi mi si blocchi la query quando tento di fare un INSERT lasciando vuoto un campo che ho dichiarato NOT NULL.

  2. #2

    Re: Differenza tra NULL attivato o no

    Originariamente inviato da giancarlo75
    Non ho capito bene quando si crea un nuovo campo che differenza c'è tra dire che può essere NULL oppure negare il NULL perchè ad intuito capisco che se non può essere NULL bisogna per forza inserirci qualcosa ma poi di fatto se guardo molte tabelle nei campi NOT NULL spesso non c'è niente. La cosa che più mi preme è sapere se funzionano gli INSERT quando non si inserisce niente in un campo NOT NULL, perchè siccome devo creare una tabella non vorrei che poi mi si blocchi la query quando tento di fare un INSERT lasciando vuoto un campo che ho dichiarato NOT NULL.
    un campo NULL e' diverso da NOT NULL vuoto (empty), e' diverso da zero, semplicemente non esiste. In pratica un campo NOT NULL lasciato vuoto sara' "riempito" con il valore di default. Un campo NULL lasciato tale di fatto non esiste e non viene considerato nei raggruppamenti (count, avg etc.).

    Un campo NULL se valorizzato perde la caratteristica di "inesistente" e cancellando un eventuale contenuto non tornera' NULL ma empty. Per tornare NULL deve essere nuovamente settato a NULL con un update ... set campo=NULL

    Anche nella SELECT devi citare in modo esplicito che cerchi un campo con valore NULL perche' se cerchi un campo vuoto (empty) il NULL non verra' trovato.

  3. #3
    Tutto è chiaro ma osservando un po' di tabelle da phpmyadmin è meno chiaro.
    Ci sono campi che sono NOT NULL e come PREDEFINITO non hanno nulla e vengono lasciati vuoti. Tuttavia, seguendo il ragionamento, questi campi sarebbero empty ma non nulli... giusto?
    Io invece ho provato a creare un campo NOT NULL con un PREDEFINITO vuoto da phpmyadmin ma non ci sono riuscito, il PREDEFINITO me lo da per forza impostato su None e quando non inserisco nulla nel campo questo si riempie automaticamente con uno 0.
    Comunque non mi importa molto se il campo invece di essere vuoto ha degli 0, quello che mi importa è come faccio quando lo estraggo a capire che è uno 0. Intendo dire: quello 0 che estraggo dal campo è considerato numero o stringa?
    Devo controllarlo così:
    if($id==0) assegna l'id;
    oppure così:
    if($id=="0") assegna l'id

  4. #4
    Precisiamo: phpmyadmin e' un applicativo che fa le cose impostate dallo staff che lo ha programmato. Quindi "traduce" secondo la sua visione le cose che trova nel server mysql. Puo' piacere oppure no, ma e' cosi'.

    Se vuoi conoscere esattamente come e' impostata la tabella esegui la query seguente:

    SHOW CREATE TABLE nome_tabella

    vedrai che il default (se non assegnato) sara' '' cioe' empty mentre se il campo e' numerico sara' 0

    il campo auto increment deve essere dichiarato [unsigned] NOT NULL [default NONE] e deve essere chiave primaria.

    Un campo numerico NOT NULL non puo' essere vuoto ma sara' 0. Un campo stringa sara' '' cioe' empty. Se utilizzi una chiave primaria auto increment non dovrai fare nulla perche' NON ci saranno mai campi vuoti o con 0.

    La chiave primaria serve per identificare esattamente un record a prescindere dal suo contenuto ed e' proprio questa la sua funzione, quindi nessun NULL, empty o campo duplicato.

    Per quanto riguarda stringa o numerico dipendera' anche da come e' impostata la variabile SQL-MODE specie per l'inserimento e quindi un numerico potrebbe essere messo tra apici oppure no, dipendera' da SQL-MODE.

    Trovi un articolo di Luca200 con molte informazioni che ti possono interessare.

    http://database.html.it/guide/leggi/87/guida-mysql/

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Grazie, adesso è tutto più chiaro.
    Comunque nel dubbio se il dato estratto è numero o stringa io farei:
    $campo_estratto = (int)$campo_estratto
    prima di un eventuale controllo, così son sicuro che è un numero, anche perchè una volta online non ho il controllo delle variabili del sistema.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.