jeu de caractères (charset) d'une connexion SQL externe #3506

Closed
opened 8 years ago by Fil · 9 comments
Fil commented 8 years ago
Owner

Lorsqu'on définit une connexion vers une base MySQL externe (non spip), on pouvait préciser une connexion en utf-8 en appliquant la recette suivante dans config/toto.php :

spip_connect_db(…);
mysql_query("SET NAMES 'utf8'");

Avec le passe à mysqli ceci n'est plus fonctionnel et il faut remplacer par :

$a = spip_connect_db(…);
mysqli_query($a["link"], "SET NAMES 'utf8'");

Comme on voit on a d'une part une régression, d'autre part une complication supplémentaire. Je crois que ça milite pour l'inclusion d'un nouveau paramètre dans spip_connect_db, qui permette de définir des options (charset de connexion, charset du contenu…). Pour faire simple, peut-être un énième paramètre sous forme de tableau nommé ?

Je mets 3.1 car il s'agit d'une régression, mais si on le résout pas, avec un peu de doc ça ne sera pas gravissime.

Lorsqu'on définit une connexion vers une base MySQL externe (non spip), on pouvait préciser une connexion en utf-8 en appliquant la recette suivante dans config/toto.php : ``` spip_connect_db(…); mysql_query("SET NAMES 'utf8'"); ``` Avec le passe à mysqli ceci n'est plus fonctionnel et il faut remplacer par : ``` $a = spip_connect_db(…); mysqli_query($a["link"], "SET NAMES 'utf8'"); ``` Comme on voit on a d'une part une régression, d'autre part une complication supplémentaire. Je crois que ça milite pour l'inclusion d'un nouveau paramètre dans `spip_connect_db`, qui permette de définir des options (charset de connexion, charset du contenu…). Pour faire simple, peut-être un énième paramètre sous forme de tableau nommé ? Je mets 3.1 car il s'agit d'une régression, mais si on le résout pas, avec un peu de doc ça ne sera pas gravissime.
Fil commented 8 years ago
Poster
Owner

problème repéré par `marceld

problème repéré par `marceld
Owner

En fait la methode que tu décris est historiquement ancienne et n'a plus cours.
Depuis SPIP 3.0(?) tu peux définir le charset de la connexion SQL via la meta charset_sql_connexion
Il est automatiquement renseigné à "utf8" sur les nouvelles installations, il faut le renseigner manuellement sur les vieux SPIP au besoin.

En fait la methode que tu décris est historiquement ancienne et n'a plus cours. Depuis SPIP 3.0(?) tu peux définir le charset de la connexion SQL via la meta `charset_sql_connexion` Il est automatiquement renseigné à "utf8" sur les nouvelles installations, il faut le renseigner manuellement sur les vieux SPIP au besoin.
Owner
cf https://core.spip.net/projects/spip/repository/entry/branches/spip-3.0/ecrire/base/connect_sql.php#L94 en SPIP 3.0 et https://core.spip.net/projects/spip/repository/entry/branches/spip-2.1/ecrire/base/connect_sql.php#L89 en SPIP 2.1 qui supportait donc déjà cette meta **Version cible mise à 2.1**
Fil commented 8 years ago
Poster
Owner

euh non, en l'occurrence le pb se situe en branche dev (future 3.1)

la base cible n'est PAS une base SPIP, donc n'a pas de spip_meta (et encore moins de charset_sql_connexion)

Version cible mise à 3.1

euh non, en l'occurrence le pb se situe en branche dev (future 3.1) la base cible n'est PAS une base SPIP, donc n'a pas de spip_meta (et encore moins de charset_sql_connexion) **Version cible mise à 3.1**
Owner

ok, compris, my bad.
Du coup comme on a deja un modus operandi pour les charsets de connexion en base SPIP, je ne sais pas si ajouter une argument a spip_connect_db est le mieux.
Quid d'une globale qu'on peut affecter juste avant l'appel, et qui sera prise en compte sur les connexions de base externe uniquement ?

$GLOBALS['charset_sql_connexion']='utf8';
spip_connect_db(....);
ok, compris, my bad. Du coup comme on a deja un modus operandi pour les charsets de connexion en base SPIP, je ne sais pas si ajouter une argument a spip_connect_db est le mieux. Quid d'une globale qu'on peut affecter juste avant l'appel, et qui sera prise en compte sur les connexions de base externe uniquement ? <pre> $GLOBALS['charset_sql_connexion']='utf8'; spip_connect_db(....); </pre>
Fil commented 8 years ago
Poster
Owner

oui c'est une hypothèse, mais il me semble quand même que le charset de connexion est un attribut de la connexion elle-même.

C'est embêtant parce qu'il y a une signature de fonction déjà compliquée, et qu'on n'est pas en python :) mais ça aurait plus de sens d'être dans l'appel de la fonction

oui c'est une hypothèse, mais il me semble quand même que le charset de connexion est un attribut de la connexion elle-même. C'est embêtant parce qu'il y a une signature de fonction déjà compliquée, et qu'on n'est pas en python :) mais ça aurait plus de sens d'être dans l'appel de la fonction
Owner

Appliqué par commit r22337.
Statut changé à Fermé

Appliqué par commit r22337. **Statut changé à Fermé**
b_b commented 7 years ago
Owner
There is no content yet.

Idée : dans tous les fichiers connect/truc.php, générer un commentaire de doc juste avant l'appel à la fonction spip_connect_db(), comme ça tout le monde sait tout de suite ce qu'on peut y remplir, en ouvrant le fichier de connexion.

Parce que là j'ai trouvé de ticket/thread depuis une recherche Google, et je ne savais même pas que ce nouvel argument existait à la fin (on n'a que des '', '', '').

Idée : dans tous les fichiers connect/truc.php, générer un commentaire de doc juste avant l'appel à la fonction spip_connect_db(), comme ça tout le monde sait tout de suite ce qu'on peut y remplir, en ouvrant le fichier de connexion. Parce que là j'ai trouvé de ticket/thread depuis une recherche Google, et je ne savais même pas que ce nouvel argument existait à la fin (on n'a que des '', '', '').
Sign in to join this conversation.
No Milestone
No project
No Assignees
4 Participants
Notifications
Due Date

No due date set.

Dependencies

This issue currently doesn't have any dependencies.

Loading…
There is no content yet.