[SQL] Tipi di dato - Stringhe

Stato
Discussione chiusa ad ulteriori risposte.

GenKs

Utente Silver
12 Agosto 2007
68
5
2
74
Allora, vado immediatamente al problema, il quale è la difficoltà nel comprendere alcune cose riguardo ai tipi di stringhe. Di seguito vi illustrerò i vari dubbi.
Quindi facciamo un esempio, io ho una tabella =>

Codice:
CREATE TABLE prova(
id INT PRIMARY KEY auto_increment,
stringa VARCHAR(20) BINARY) DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;

Allora se non sbaglio il campo stringa risulterà la collation binaria del charset latin1 giusto? Ma che cambia se è binaria o non?

Quello che vedo nel DB è lo stesso sia che abbia collation latin1_swedish_ci che bin.
La collation dovrebbe essere(sempre se ho capito bene), un fattore di confronto tra le stringhe.
Tipo se ho una stringa ciao con collation latin1_swedish_ci e la confronto con una cs che è CiAo, dovrebberò risultare diverse giusto?

Vabbè poi ci sono i vari attributi e penso di non avere problemi, ripeto PENSO.
C'è NATIONAL che utilizza il Charset di default in questo caso quello della tabella. Poi BINARY la collation binaria, nel quale ho ancora dubbi. ASCII e UNICODE che si riferiscono al Charset rispettivo.

Infine, BINARY e VARBINARY, ho letto che non hanno character set, e quindi memorizzano le stringhe di byte invece di caratteri con un riempimento a destra di byte 0x00. Ecco l'ho provati ad utilizzare ma nella lettura mi risultano sempre caratteri e non stringhe di byte.

Ecco penso che sia tutto.
 
Genks ha detto:
Ma che cambia se è binaria o non?

Nel caso di MySQL, una stringa considerata non binaria è anche case insensitive, cioè fare una select su "where username='BlackLight'" o "where username='blacklight'" è la stessa cosa. Se vuoi che quel campo, e le ricerche su quel campo, siano case sensitive, su MySQL devi dichiarare quel campo come binary.
 
BlackLight ha detto:
Genks ha detto:
Ma che cambia se è binaria o non?

Nel caso di MySQL, una stringa considerata non binaria è anche case insensitive, cioè fare una select su "where username='BlackLight'" o "where username='blacklight'" è la stessa cosa. Se vuoi che quel campo, e le ricerche su quel campo, siano case sensitive, su MySQL devi dichiarare quel campo come binary.

Quindi binaria significa che nel momento del confronto, utilizza il byte relativo ad ogni carattere nel character set giusto. Quindi varrebbe a dire che è simile all'utilizzo della collation di latin1, latin1_swedish_cs giusto?
 
Stato
Discussione chiusa ad ulteriori risposte.