2010-09-08 12 views
13

Sto usando una tabella con una colonna varchar. Non mi sono reso conto che lo spazio bianco finale non è considerato nei confronti (e che, apparentemente, due valori che differiscono solo nella quantità di spazi bianchi finali violerà la proprietà di unicità, se specificato).Lo spazio vuoto finale in varchar deve essere considerato in confronto

Ho bisogno di sistemarlo sul tavolo, preferibilmente in posizione. C'è un percorso consigliato per correggere una tabella come questa in MySQL?

Sto accedendo al DB rigorosamente tramite un controllo di programma I, quindi passare a un formato leggibile non umano come binario andrebbe bene. Ma non sono sicuro di come fare una cosa del genere e non voglio distruggere il tavolo.

+3

Interessante problema. La soluzione che viene in mente è quella di aggiungere un carattere alla fine di tutti i valori e quindi eliminarlo quando si legge il valore fuori dalla tabella. – nathan

+0

Se il problema è stato risolto, scegli una risposta accettata o invia la tua soluzione. – onebree

risposta

3

Si può eseguire una query vuota sul campo della tabella che ha lo spazio bianco?

RTRIM(str) 

restituisce la stringa str con il trascinamento caratteri spazio rimossi. mysql> SELECT RTRIM ('barbar'); -> 'barbar' Questa funzione è sicura multi-byte.

10

Devo supporre che tu stia usando MySQL 5.x perché MySQL 4.x non memorizza gli spazi finali in una colonna VARCHAR.

Utilizzando la = operatore di serie in MySQL, come da te indicato, spazi finali non sono considerati:

SELECT 'this' = 'this ' restituisce TRUE

Tuttavia, LIKE paragona il personaggio stringhe per carattere, quindi gli spazi finali sono significativi.

SELECT 'this' LIKE 'this ' restituisce FALSE.

Entrambi = e LIKE possono essere case non sensibili, utilizzando le regole di confronto predefinite. Utilizzare la clausola COLLATE per specificare le regole di confronto se è necessario confrontarle in un modo sensibile al maiuscolo/minuscolo.

+0

L'utilizzo di LIKE invece di '=' apre una lattina di worm, ad esempio quando si confrontano stringhe che provengono dall'input dell'utente. –

Problemi correlati