Maison  >  Article  >  développement back-end  >  Caractères UTF8 incorrects après la sélection dans Postgres

Caractères UTF8 incorrects après la sélection dans Postgres

WBOY
WBOYavant
2024-02-12 19:48:091183parcourir

从 postgres 选择后 UTF8 字符不正确

Éditeur PHP Apple rencontre parfois le problème de caractères UTF8 incorrects après sélection lors de l'utilisation de la base de données postgres. Dans ce cas, les caractères spéciaux stockés dans la base de données peuvent apparaître comme des caractères tronqués ou incorrects. La solution à ce problème consiste à garantir l'affichage correct des caractères en définissant correctement les jeux de caractères de la base de données et de la connexion. Lors de l'utilisation d'une base de données postgres, nous pouvons résoudre ce problème en modifiant le fichier de configuration ou en définissant le jeu de caractères lors de la connexion à la base de données. Définir correctement le jeu de caractères garantira que nous pouvons gérer et afficher correctement divers caractères et améliorer la stabilité et la fiabilité de la base de données.

Contenu de la question

J'ai une table de base de données dans Postgres contenant des adresses e-mail. L'une des clientes a un tréma (ü) dans son adresse e-mail. Cela ne devrait pas poser de problème, mais d'une manière ou d'une autre, la chaîne go contenait la mauvaise séquence d'octets (c'était e3bc au lieu de c3bc), ce qui m'a ensuite causé de nombreux problèmes.

Je me connecte à la base de données en utilisant client_encoding=utf8 et la base de données est définie sur utf8. Si j'exécute la commande suivante, je peux voir que la séquence d'octets dans la base de données est comme prévu :

SELECT encode("email"::bytea, 'hex') FROM participants WHERE  email like 'XXXXXX%';
                    encode                    
----------------------------------------------
                     c3bc

(Le reste des données est masqué)

J'utilise le package base de données/sql et le pilote postgres pour lire les données, et si j'imprime la chaîne en go, j'obtiens xxxxxxe3bcxxxxxx, ce qui n'est pas ce à quoi je m'attends (encore une fois, en cachant le reste de l'e-mail avec un x ).

Est-ce un bug ou ai-je mal compris quelque chose ?

Solution de contournement

Assurez-vous que votre base de données est correctement définie sur UTF8. Les paramètres régionaux ont été corrigés lors de la création de la base de données, ce qui pouvait amener LOWER 等 sql 函数出现问题。使用 pg_dropclusterpg_createcluster --encoding=UTF8 à recréer la base de données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer