Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    6,034

    Alter Table non cambia il tipo di campo

    il campo 'livello' lo voglio portare da CHAR(2) a VARCHAR(2):

    ALTER TABLE `utenti` CHANGE `livello` `livello` VARCHAR( 2 ) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL

    la eseguo e da phpmyadmin il campo resta sempre CHAR(2)... e dice anche che "La query è stata eseguita con successo"

    dov'è l'errore?

  2. #2

    Re: Alter Table non cambia il tipo di campo

    Originariamente inviato da meganoide
    il campo 'livello' lo voglio portare da CHAR(2) a VARCHAR(2):

    ALTER TABLE `utenti` CHANGE `livello` `livello` VARCHAR( 2 ) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL

    la eseguo e da phpmyadmin il campo resta sempre CHAR(2)... e dice anche che "La query è stata eseguita con successo"

    dov'è l'errore?
    nessun errore. se il campo e' minore di tre verra' sempre impostato come CHAR. Non mi ricordo ora se tre e' compreso o meno. Il perche' e' intuitivo. Siccome VARCHAR usa un byte per definire la lunghezza tanto vale che sia un CHAR che e' un campo di lunghezza fissa.

    Occhio al contrario... per lunghezze superiori >3 (con la riserva sul 3 che non ricordo) se utilizzi un campo VARCHAR tutti i campi CHAR di lunghezza superiore a 3 verranno trasformati in VARCHAR. In pratica mysql puo' gestire solo un tipo di campo tra CHAR e VARCHAR con sempre il limite minimo di > 3. Al di sotto del quale e' sempre CHAR.

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

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    6,034

    Re: Re: Alter Table non cambia il tipo di campo

    ho visto: vuole minimo varchar(4) oppure, per una lunghezza minore, lo passa automaticamente a char(3) (su mysql 4.1)

    Ma a questo punto, entrando nel merito dello scopo del campo, prevedendo non più di 9 livelli potrei anche usare:

    tinyint(1)

    o no?

  4. #4

    Re: Re: Re: Alter Table non cambia il tipo di campo

    Originariamente inviato da meganoide
    ho visto: vuole minimo varchar(4) oppure, per una lunghezza minore, lo passa automaticamente a char(3) (su mysql 4.1)

    Ma a questo punto, entrando nel merito dello scopo del campo, prevedendo non più di 9 livelli potrei anche usare:

    tinyint(1)

    o no?
    Se i livelli sono numerici....

    occhio che e' inutile se lo fai per risparmiare spazio. I campi INTERI sono a lunghezza fissa.
    TINYINT occupa un byte che e' anche il minimo possibile per un dato (escludendo char(0) ). Il numero che citi (tinyint(1)) serve a definire le cifre da visualizzare ma non e' il limite della capacita' del campo. In pratica serve con l'uso di UNSIGNED ZEROFILL a definire il riempimento con gli zero e non a limitare la capacita' del campo stesso che rimarra' di 255 valori numerici.

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

  5. #5
    se questi livelli hanno un nome specifico forse è meglio un ENUM, potrebbe essere più comodo

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.