270 votes

Comment convertir un BLOB en TEXTE dans Mysql ?

J'ai un grand nombre d'enregistrements où le texte a été stocké dans un blob dans MYSQL. Pour faciliter la manipulation, j'aimerais changer le format de la base de données en TEXTE. Avez-vous une idée de la manière la plus simple d'effectuer ce changement sans interrompre les données - je suppose qu'elles devront être encodées correctement ?

6voto

Dean Or Points 461

Aucune de ces réponses n'a fonctionné pour moi. Lors de la conversion en UTF8, lorsque l'encodeur rencontre un ensemble d'octets qu'il ne peut pas convertir en UTF8, il en résulte une substitution ? qui entraîne une perte de données. Vous devez utiliser UTF16 :

SELECT
    blobfield,
    CONVERT(blobfield USING utf16),
    CONVERT(CONVERT(blobfield USING utf16), BINARY),
    CAST(blobfield  AS CHAR(10000) CHARACTER SET utf16),
    CAST(CAST(blobfield  AS CHAR(10000) CHARACTER SET utf16) AS BINARY)

Vous pouvez inspecter les valeurs binaires dans MySQL Workbench. Cliquez avec le bouton droit sur le champ -> Ouvrir la valeur dans la visionneuse-> Binaire. Une fois reconverties en BINAIRE, les valeurs binaires doivent être identiques à l'original.

Vous pouvez également utiliser la base-64 qui a été conçue à cet effet :

SELECT
    blobfield,
    TO_BASE64(blobfield),
    FROM_BASE64(TO_BASE64(blobfield))

1 votes

NOTE : TO_BASE64 a un objectif différent de celui de la question posée dans le message original (OP). Le PO "sait" qu'il a texte stocké dans un champ blob, et veut voir ce texte comme du texte. (Dans ce but, la fonction conversion en utf16 est approprié - si le texte était à l'origine en utf16 ). TO_BASE64 est un moyen de montrer une tache arbitraire en utilisant des caractères visibles. Il développe les octets d'origine, en utilisant un ensemble de 64 caractères.

3voto

marcosn Points 11

phpMyAdmin screenshot En utilisant phpMyAdmin, vous pouvez également définir les options pour afficher le contenu BLOB et afficher le texte complet.

0 votes

Comment s'y prendre exactement ? Votre réponse sera beaucoup plus utile si vous publiez un code et/ou des captures d'écran détaillés.

2voto

Ou vous pouvez utiliser cette fonction

DELIMITER $$

CREATE FUNCTION BLOB2TXT (blobfield VARCHAR(255)) RETURNS longtext
DETERMINISTIC
NO SQL
BEGIN
       RETURN CAST(blobfield AS CHAR(10000) CHARACTER SET utf8); 
END
$$

DELIMITER ;

1voto

THOTH Points 42

J'ai eu le même problème avec mes enregistrements MariaDB. Il a été résolu (par mon collègue) en utilisant

select
uncompress(blobfield)
from table

0voto

Kapidis Points 16
SELECCT TO_BASE64(blobfield)  
FROM the Table

a fonctionné pour moi.

Le CAST(blobfield AS CHAR(10000) CHARACTER SET utf8) et le CAST(blobfield AS CHAR(10000) CHARACTER SET utf16) ne m'ont pas montré la valeur textuelle que je voulais obtenir.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X