[risolto][MYSQL] caratteri accentati e campi duplicati

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
melfnt
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1312
Iscrizione: sabato 15 ottobre 2011, 22:25

[risolto][MYSQL] caratteri accentati e campi duplicati

Messaggio da melfnt »

Salve, ho un problema con la gestione dei caratteri accentati su mysql.

Seguendo alcune guide, ho attivato la codifica utf-8 per le tabelle, e ora posso memorizzare i caratteri accentati.
Solo che, quando vado ad inserire una parola composta dalle stesse lettere di una già presente nel db, eventualmente accentate (per esempio: pero, però) mi da l'errore "Duplicate entry key", come se fossero la stessa parola.

Codice: Seleziona tutto

mysql> describe parola;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| testo | varchar(50) | YES  | UNI | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

mysql> insert into parola (testo) values ('però');
Query OK, 1 row affected (0.06 sec)

mysql> select * from parola;
+----+-------+
| id | testo |
+----+-------+
|  3 | però  |
+----+-------+
1 row in set (0.00 sec)

mysql> insert into parola (testo) values ('pero');
ERROR 1062 (23000): Duplicate entry 'pero' for key 'testo'
mysql> select * from parola;
+----+-------+
| id | testo |
+----+-------+
|  3 | però  |
+----+-------+
1 row in set (0.00 sec)
Non so dove sbattere la testa....
:muro:
Ultima modifica di melfnt il mercoledì 23 luglio 2014, 12:21, modificato 1 volta in totale.
melfnt
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1312
Iscrizione: sabato 15 ottobre 2011, 22:25

Re: [MYSQL] caratteri accentati e campi duplicati

Messaggio da melfnt »

Dopo una ricerca, ho trovato la soluzione: in pratica bisogna specificare utf8_bin come collate della tabella

Codice: Seleziona tutto

mysql> insert into parola (testo) values ('pero');
Query OK, 1 row affected (0.04 sec)

mysql> insert into parola (testo) values ('però');
Query OK, 1 row affected (0.04 sec)

mysql> select * from parola;
+----+-------+
| id | testo |
+----+-------+
|  1 | pero  |
|  2 | però  |
+----+-------+
2 rows in set (0.01 sec)
Se la tabella è definita così:

Codice: Seleziona tutto

CREATE TABLE `parola` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `testo` varchar(50) UNIQUE DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
CHARACTER SET utf8
serve a settare la codifica dei caratteri: con utf8 è possibile memorizzare caratteri accentati.
Il collate di default per questo character set è utf8_default, che non fa differenza fra i caratteri accentati ed i relativi non accentati, questa era la causa del mio errore.

COLLATE utf8_bin
Questo setta il collate a utf8_bin, che invece distingue fra caratteri accentati e non.

;)
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 14 ospiti