Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

ubuntu MySQL et utf8 ?

7 réponses
Avatar
Une Bévue
J'ai suivi les conseils de :
<http://doc.ubuntu-fr.org/mysql>

et j'ai donc édité mon fichier " /etc/mysql/my.cnf".

en y ajoutant :
character_set_database=utf8
character_set_server=utf8
skip-character-set-client-handshake

une première fois, et :
character-set-database=utf8
character-set-server=utf8
skip-character-set-client-handshake

une seconde fois.

Mais j'ai toujours :
mysql> show variables like "%character%";
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

mysql> show variables like '%collation%';
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | utf8_general_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+

bien sûr, j'ai redémarré le server entretemps.

alors que je souhaite avoir ***pour toutes mes bd***
utf8 avec collation utf8 fr.
--
L'homme est imparfait, mais ce n'est pas étonnant
quand on pense à l'époque où il a été créé.
— Alphonse Allais

7 réponses

Avatar
Une Bévue
Le 16/01/2013 11:39, Une Bévue a écrit :
J'ai suivi les conseils de :
<http://doc.ubuntu-fr.org/mysql>




bon, j'ai suivi d'autres conseils (pour Mac OS X Mountain Lion) :
<http://dba.stackexchange.com/questions/30960/mysql-wait-timeout-mac-os-x-mountain-lion-how-do-i-set-it>

là ça roule, ce que j'ai fait (ça peut servir à d'autres) :

$ mysql -u root -p
[...]
mysql> set global character_set_database='utf8';
Query OK, 0 rows affected (0.00 sec)

mysql> set global character_set_server='utf8';
Query OK, 0 rows affected (0.00 sec)
mysql> q
Bye

*** apparemment il faut quitter mysql pour valider les changements, puis
re-rentrer dans mysql :
$ mysql -u root -p
[...]
mysql> show variables like '%character%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)


donc pour character set c'est OK, reste à vérifier :

que c'est bien pris en compte ;
qu'advient-il des db qui étaient en latin1 ?

et enfin trouver quoi mettre pour changer :
$ sudo mysqladmin -pyvon5533 variables | grep collat
| collation_connection | latin1_swedish_ci

|
| collation_database | latin1_swedish_ci

|
| collation_server | latin1_swedish_ci

|


en qqc d'équivalent à mon "setlocale(LC_CTYPE, 'fr_FR.utf-8')".


--
L'homme est imparfait, mais ce n'est pas étonnant
quand on pense à l'époque où il a été créé.
— Alphonse Allais
Avatar
Une Bévue
Le 16/01/2013 14:40, Une Bévue a écrit :
que c'est bien pris en compte ;



oui +/- en tout cas au niveau de la définition de la table :
CREATE TABLE `categories` (
`rowid` int(11) NOT NULL,
`idx` int(11) NOT NULL,
`name` varchar(80) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

pas au niveau des données...

qu'advient-il des db qui étaient en latin1 ?



rien ne change, les données restent en latin1 MEME APRES un update des
lignes comportants des accents.

et enfin trouver quoi mettre pour changer :
$ sudo mysqladmin -pyvon5533 variables | grep collat
| collation_connection | latin1_swedish_ci
|
| collation_database | latin1_swedish_ci
|



bon, ça c'est facile :
$ mysql -u root -p
[...]

mysql> set global collation_connection='utf8_general_ci';
Query OK, 0 rows affected (0.00 sec)

mysql> set global collation_database='utf8_general_ci';
Query OK, 0 rows affected (0.00 sec)

mysql> set global collation_server='utf8_general_ci';
Query OK, 0 rows affected (0.00 sec)

mysql> q
Bye

$ sudo mysqladmin -p variables | grep collat
[sudo] password for yt:
| collation_connection | utf8_general_ci

|
| collation_database | utf8_general_ci

|
| collation_server | utf8_general_ci

|

--
L'homme est imparfait, mais ce n'est pas étonnant
quand on pense à l'époque où il a été créé.
— Alphonse Allais
Avatar
moi-meme
Le Wed, 16 Jan 2013 15:34:35 +0100, Une Bévue a écrit :

rien ne change, les données restent en latin1 MEME APRES un update des
lignes comportants des accents.



AMHA ca dit la charset utilisé, ça ne transcode pas.

iconv ?
Avatar
Une Bévue
Le 16/01/13 16:22, moi-meme a écrit :
AMHA ca dit la charset utilisé, ça ne transcode pas.



ben, j'ai droppé la base et l'ai recréée par :
CREATE TABLE `categories` (
`rowid` int(11) NOT NULL,
`idx` int(11) NOT NULL,
`name` varchar(80) NOT NULL DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

toutes les variables internes définissant un CHARACTER SEt sont à 'utf8'
et toutes les variables internes de COLLATION sont à 'utf8_general_ci'.

quand je suis au terminal, je suis en UTF-8, mon script client en php
utilise l'utf8, MAIS la ligne :
echo "character_set = " . mysqli_character_set_name($mysqli) . "<br />";
avec $mysqli = new mysqli("127.0.0.1", $user, $password, $database, $port);

me retourne :

"character_set = latin1"

ça voudrait -au contraire- que MySQL transcode en latin1 ce qui est
entré en utf8...


iconv ?


ben s'il faut utiliser iconv pour se connecter à une base, c'est
bullshit non ?

--
L'homme est imparfait, mais ce n'est pas étonnant
quand on pense à l'époque où il a été créé.
— Alphonse Allais
Avatar
Une Bévue
Le 16/01/13 11:39, Une Bévue a écrit :
alors que je souhaite avoir ***pour toutes mes bd***
utf8 avec collation utf8 fr.



Bon j'ai trouvé "un peu par hasard"...
Le problème proviendrait, d'après ce que j'ai compris, de l'interface
entre MySQL et PHP5 "mysqli", il faut spécifier le charset voulu :

Avec :
$mysqli = new mysqli("127.0.0.1", $user, $password, $database, $port);

utiliser :

$mysqli->set_charset("utf8")

c'est curieux que cette interface transcode en latin1...



--
L'homme est imparfait, mais ce n'est pas étonnant
quand on pense à l'époque où il a été créé.
— Alphonse Allais
Avatar
moi-meme
Le Wed, 16 Jan 2013 16:31:39 +0100, Une Bévue a écrit :

ça voudrait -au contraire- que MySQL transcode en latin1 ce qui est
entré en utf8...


iconv ?


ben s'il faut utiliser iconv pour se connecter à une base, c'est
bullshit non ?



c'est encore plus bullshit si MySQL transcode en latin1 ...

Gxxx m'a trouvé ça : (si ça peut aider)

http://docs.moodle.org/all/fr/Convertir_votre_base_MySQL_en_UTF-8
Avatar
Une Bévue
Le 16/01/13 22:08, moi-meme a écrit :
c'est encore plus bullshit si MySQL transcode en latin1 ...



ben, d'après ce que j'ai compris, c'est ***l'interface*** entre MySQL et
PHP5, soit mysqli qui ***transcode en latin1...

Gxxx m'a trouvé ça : (si ça peut aider)

http://docs.moodle.org/all/fr/Convertir_votre_base_MySQL_en_UTF-8



ah, super merci beaucoup, mais bon, d'une part ça, je l'ai déjà fait
mais aussi il me semble que dans la docum propre à MySQL il règne une
certaine confusion, exemples :

est-ce 'utf8_general_ci' ou 'utf8_unicode_ci'?

et même le nom des variables internes à MySQL est-il avec tirets ou
underscore ?

"default-character-set" ou "default_character_set"

je vérifierai tout cela en fonction des versions que j'ai.

mais pour l'instant, tout me semble être passé en utf8 pour MySQL, quand
à l'interface MySQL/PHP5 il m'a suffit de faire :
$mysqli->set_charset("utf8")
pour avoir les sorties MySQL en utf8

--
L'homme est imparfait, mais ce n'est pas étonnant
quand on pense à l'époque où il a été créé.
— Alphonse Allais