Charset latin9 indisponible dans MySQL

Bonjour à tous,

Je souhaite passer une de mes BDD MySQL en latin9 (pour disposer du caractère euro tout en restant compatible avec le charset actuel de la base qui est en latin1).
Or, ce charset n’est pas listé dans phpmyadmin. Et en effet, elle semble absente :

mysql> SHOW CHARACTER SET LIKE 'latin%' ;
+---------+-----------------------------+-------------------+--------+
| Charset | Description                 | Default collation | Maxlen |
+---------+-----------------------------+-------------------+--------+
| latin1  | cp1252 West European        | latin1_swedish_ci |      1 |
| latin2  | ISO 8859-2 Central European | latin2_general_ci |      1 |
| latin5  | ISO 8859-9 Turkish          | latin5_turkish_ci |      1 |
| latin7  | ISO 8859-13 Baltic          | latin7_general_ci |      1 |
+---------+-----------------------------+-------------------+--------+

Pourtant, la locale est bien installée :

# locale -a
C
C.UTF-8
français
french
fr_FR
fr_FR@euro
fr_FR.iso88591
fr_FR.iso885915@euro
fr_FR.utf8
POSIX

Que faire ?

Environnement :

  • Debian Jessie (8.4)
  • Mysql 5.5 (5.5.49-0+deb8u1)

Merci d’avance :slight_smile:

Hello,

La vraie question est… Pourquoi ?!

Pourquoi tu veux utiliser la caractères euros ? Il faut mieux que tu laisse le champs de ta tables en int et tu sais que c’est en euros, et si tu as besoin de faire une conversion avec ton code.

Sinon tu vas perdre en performance dans les recherches de ta tables car tu vas passer de l’int à du char

Heu… Je crois qu’il y a une légère incompréhension là :wink:
La problématique était simplement que certains champs texte arrivaient avec un signe “€” dedans (du genre “j’ai acheté un truc à 10€”. Or le latin1 ne supporte pas ce symbole, ce dernier n’étant présent qu’en latin9 (mis à part l’UTF-8).

En cherchant au fin fond de la documentation de MYSQL j’ai fini par tomber sur un bug report qui indique que les développeurs de MySQL utilisent une version alternative de latin1 (CP1252 au lieu de ISO-8859-1) qui, lui, comporte le symbole “euro” (WTF ?!). Le problème était donc la couche applicative qui parlait en latin1 et qui refusait de passer le symbole “€” à une base en latin1 (alors que cette base POUVAIT le recevoir vu la bidouille des devs de MySQL…).

Bref, sujet résolu :slight_smile: