Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it L'avatar di *Ray*
    Registrato dal
    Oct 2000
    Messaggi
    495

    Pillolina: MySQL e nomi tabelle minuscole/maiuscole

    A beneficio di tutti riporto una cosa magari ovvia ma che mi ha fatto dannare per parecchio tempo.

    Avrete notato che sotto Windows i nomi delle tabelle di MySQL sono tutti in minuscolo vero?

    Io ho l'abitudine di chiamare le tabelle con sia maiuscoli e minuscoli perche' preferisco nomi lunghi e significativi piuttosto che acronimi incomprensibili. Ad esempio, una mia tabella si puo' chiamare anagraficaUtenti, supportoLombareSedilePosteriore e cosi' via.

    Per abitudine sviluppo sotto windows e quando porto i dati in una macchina Linux, i nomi delle tabelle di MySQL, essendo legati al filesystem, diventano improvvisamente rilevanti. Dunque se voi avete una tabella che sotto windows si chiama anagraficautenti e sotto linux fate una SELECT from anagraficaUtenti, la query fallisce perche' non viene trovata la tabella. Questa e' una assurdita' che si puo' risolvere con una direttiva di MySQL.

    In pratica potete forzare lo stesso comportamento che c'e' sotto Linux anche sotto Windows, facendo si' che i nomi delle tabelle siano case sensitive.

    Per fare questo non dovete fare altro che aggiungere un parametro alla riga di comando con la quale lanciate il daemon di MySQL, per la precisione:

    lower_case_table_names

    Se lanciate:
    codice:
    mysqld --lower_case_table_names=0
    otterrete lo stesso comportamento di Linux anche sotto Windows. I valori permessi sono 0, 1, 2. Per maggiori informazioni, leggete qui: http://dev.mysql.com/doc/mysql/en/Na...nsitivity.html

    Un breve estratto:

    How table and database names are stored on disk and used in MySQL is defined by the lower_case_table_names system variable, which you can set when starting mysqld. lower_case_table_names can take one of the following values:

    • 0 => Table and database names are stored on disk using the lettercase specified in the CREATE TABLE or CREATE DATABASE statement. Name comparisons are case sensitive. This is the default on Unix systems. Note that if you force this to 0 with --lower-case-table-names=0 on a case-insensitive filesystem and access MyISAM tablenames using different lettercases, this may lead to index corruption.
    • 1 => Table names are stored in lowercase on disk and name comparisons are not case sensitive. MySQL converts all table names to lowercase on storage and lookup. This behavior also applies to database names as of MySQL 4.0.2, and to table aliases as of 4.1.1. This value is the default on Windows and Mac OS X systems.
    • 2 => Table and database names are stored on disk using the lettercase specified in the CREATE TABLE or CREATE DATABASE statement, but MySQL converts them to lowercase on lookup. Name comparisons are not case sensitive. Note: This works only on filesystems that are not case sensitive! InnoDB table names are stored in lowercase, as for lower_case_table_names=1. Setting lower_case_table_names to 2 can be done as of MySQL 4.0.18.

  2. #2
    Buono a sapersi, non ho ancora avuto questo problema ma, essendo abb inesperto lo avrei sicuramente incontrato

    P.S. Ma sei per caso TnT Ray?
    Horazon.

  3. #3
    Solo una precisazione,
    in genere, per praticità di utilizzo, non si danno mai nomi a tabelle di db lunghi, tant'è che nel caso ci siano nomi che per forza debbo essere lunghi, si possono creare alias più corti per accedere.

    Per dare un senso alla tabella di solito di mette un Commento adeguato per rendere l'idea di utilizzo...

    Ovviamente poi uno programma come meglio crede!

    [ DarCas The Architect ]
    [ The DarCas Of Blog ]
    Chuck Norris riesce a trovare un pagliaio dentro a un ago
    :maLOL:

  4. #4
    Utente di HTML.it L'avatar di *Ray*
    Registrato dal
    Oct 2000
    Messaggi
    495
    Per la questione dei nomi lunghi, generalmente preferisco essere prolisso ma chiaro (anche nel codice) piuttosto che breve ma criptico. Ho passato un periodo in cui amavo il codice l33t criptico ma poi e' cosi' illeggibile che, abituato a dovere modificare il codice, ormai il software che scrivo sembra un tema di italiano

    Quanto ai commenti, sono certamente utili ma non risultano nel codice. Come dici giustamente, ciascuno scrive codice come preferisce, e a me piace leggere frasi in italiano compiuto nel mio codice heheheheehehe

    OT:

    Si sono io Horazozzo

    Tutto bene? Sembra che in rete in Italia siamo sempre i soliti 20 hehehe

  5. #5
    Non capisco la precisazione di DarCas, tanto alla fine c'e` il (santo) copia/incolla eheheh

    P.S. Ray ti ho risp. in priv ^^
    Horazon.

  6. #6
    Originariamente inviato da *Ray*
    Per la questione dei nomi lunghi, generalmente preferisco essere prolisso ma chiaro (anche nel codice) piuttosto che breve ma criptico. Ho passato un periodo in cui amavo il codice l33t criptico ma poi e' cosi' illeggibile che, abituato a dovere modificare il codice, ormai il software che scrivo sembra un tema di italiano

    Quanto ai commenti, sono certamente utili ma non risultano nel codice. Come dici giustamente, ciascuno scrive codice come preferisce, e a me piace leggere frasi in italiano compiuto nel mio codice heheheheehehe
    Mah, poi ogniuno ha tecniche di programmazione personali..

    Se hai cognizioni di programmazione ad oggetti e paradigmi non ti sorge questa obbiezione.. ma va bene lo stesso..
    [ DarCas The Architect ]
    [ The DarCas Of Blog ]
    Chuck Norris riesce a trovare un pagliaio dentro a un ago
    :maLOL:

  7. #7
    Utente di HTML.it L'avatar di *Ray*
    Registrato dal
    Oct 2000
    Messaggi
    495
    C'e' una cosa importante che devo aggiungere a questa "pillolina"

    codice:
    041115 20:22:33 Warning: You have forced lower_case_table_names to 0 through a
    command-line option, even though your file system 'D:\MySQL4021\data\' is case insensitive.
    This means that you can corrupt a MyISAM table by accessing it with different cases. You should consider changing
    lower_case_table_names to 1 or 2
    Questo warning non era presente nella versione 4.015 di MySQL che usavo quando postai questo topic. Nella 4.021 e presumibilmente nelle successive versioni di MySQL (non ho dati al momento in quanto non ho ancora installato la 4.1.7), questo warning c'e'.

    Cosa vuole dire per chi non sa l'inglese? Vuole dire che se si accede a tabelle MyISAM con maiuscole/minuscole diverse da quella del nome esatto della tabella, si puo' corrompere la tabella. Attenzione quindi.

  8. #8
    mah pillolina
    adesso si sono svalutate anche le "pillole"

    grazie euro grazie!
    nice

  9. #9
    Originariamente inviato da Horazon
    P.S. Ma sei per caso TnT Ray?
    [OT] ma TNT clan di Revolt? [/OT]

  10. #10
    Utente di HTML.it L'avatar di *Ray*
    Registrato dal
    Oct 2000
    Messaggi
    495
    [OT]Quelli di Revolt sono i nostri fratelli piccoli - Uno di noi ha smesso di giocare a Counter-Strike lungo tempo fa e ha fondato il gruppetto che gioca a Revolt[/OT]

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.