2015-08-05 13 views
5

ho enum campo che contiene lowercase e uppercase di una stessa lettera, quando provo ad aggiornare una riga e modificare il valore non funziona.mysql enumerazione non è sensibile esso corrisponde il primo colpo caso sensibilità

questo è il modo in cui riprodurre il problema:

CREATE TABLE `mytable` (
    `id` bigint(20) NOT NULL, 
    `name` varchar(100) NOT NULL, 
    `strategy` enum('g','G','r','R') NOT NULL DEFAULT 'g' 
) ENGINE=InnoDB; 

INSERT INTO `mytable` VALUES(1,'test','g'); 

ora quando provo a cambiare strategyg-G non funziona:

UPDATE `mytable` SET `strategy`='G' WHERE id=1; 

esso returnes:

Query OK, 0 rows affected (0.00 sec) 
Rows matched: 1 Changed: 0 Warnings: 0 

Io uso MySQL 5.5, per favore hel p me

EDIT:

come @farshad mentiond nel suo commento, esso uso la prima partita, se cambio l'ordine di enum e uso 'G','g',... sarà sempre utilizzare G e non si può cambiare ritorna g

+1

Dipende ordine enum. Mysql restituisce il primo carattere g abbinato, Nel mio test quando hai cambiato l'ordine in ('G', 'g') tutte le righe con 'g' in tutti i casi restituiscono 'G'. Penso che la domanda giusta sia perché mysql restituisce il primo carattere enum sempre in caso di valori enum sensibili – Farshad

risposta

2

mia soluzione sta cambiando campo collation al ASCII

ALTER TABLE `your_table` CHANGE `strategy` `strategy` ENUM( 'g', 'G', 'r', 'R') CHARACTER SET ASCII COLLATE ascii_bin NOT NULL DEFAULT 'g' 
+0

grazie funziona –

4

Dal doc:

Quando ritirato, i valori memorizzati in una colonna ENUM vengono visualizzati utilizzando la lettera maiuscola che è stata utilizzata nella definizione della colonna. Si noti che alle colonne ENUM può essere assegnato un set di caratteri e regole di confronto. Per le regole di confronto binarie o con distinzione tra maiuscole e minuscole, si tiene conto di lettercase quando si assegnano valori alla colonna.

Quindi è necessario modificare il column collation.

+0

grazie per le tue informazioni utili –

Problemi correlati