2010-01-09 7 views
3

J'ai besoin de stocker des données binaires, telles que 1110000, dans MySQL. Quand je le sélectionne, j'ai besoin que la valeur de retour soit la même 1110000.Données binaires dans MySQL

Quel type de données dois-je utiliser? Puis-je utiliser bit? Ou varbinary serait-il mieux?

+1

Le nombre de bits est-il limité? (est la longueur maximale de la chaîne binaire connue, en d'autres termes). – Tarydon

+0

non, ce n'est pas .. le nombre de bits que je veux stocker est variable. – putse

+0

Je ne connais pas votre cas d'utilisation, mais si vous devez absolument renvoyer 00011 de 00011, vous pouvez insérer un 1 devant tous les cas, puis retirer le premier 1 pour insérer 100011 et sortir 100011 – MindStalker

Répondre

9

si vous traitez avec des chiffres binaires, vous pouvez utiliser un bit field, .: par exemple

bit(64) 

est un champ de bits jusqu'à 64 bits significatifs (la taille maximale autorisée).

pour insérer des valeurs constantes, vous pouvez utiliser la b'value » notation comme ceci:

insert into bits values (b'0001001101001'); 

vous pouvez convertir un champ de bits à un certain nombre en ajoutant simplement 0 ou en utilisant CAST(). Il y a aussi la fonction pratique bin(), hex(), et oct() pour imprimer la valeur dans une base particulière.

si non-numérique, varbinary ou blob serait la méthode de stockage la plus efficace. binary est également disponible (il va tamponner des valeurs plus courtes avec nil octets tho). Si vous ne voulez pas faire face aux conversions, vous pouvez stocker la chaîne dans un varchar ou un char. il utilisera seulement environ 8 fois l'espace d'un varbinary compact.

Pour insérer/lire depuis votre application, vous devez convertir votre séquence en un tableau d'octets compressés, puis stocker la chaîne compressée dans la colonne varbinary. en C#, vous pourriez utiliser BitConverter. en PHP, vous pouvez utiliser pack/unpack.

+0

J'ai essayé de faire: INSERT INTO 'db_test'.'t_bits' (' val') VALEURS (b '0001001101001'); puis: SELECT val + 0 FROM 't_bits' elle retourne 617 cast SELECT (val comme unsigned) FROM' t_bits' renvoie également 617 cast SELECT (val en binaire) à partir de 't_bits' elle retourne 'i' SELECT bin (val) FROM 't_bits' renvoie '1001101001' la valeur de retour que je veux est identique à la valeur qui a été insérée. '0001001101001' et comment faire cela en blob? je ne comprend pas. je suis très confus .. thx tellement .. – putse

+0

les 0 principaux ne sont pas significatifs dans une valeur numérique donc 0001001101001 est lu comme 1001101001 qui est 617. pour non-numérique. le plus facile est de le stocker dans un varchar ou un char – jspcal

+0

J'ai besoin de type de données qui nécessite le plus petit stockage .. si oui, je préfère utiliser varbinary, non? parce que, basé sur le manuel mysql, l'exigence de stockage pour varchar et varbinary est la même .. est-il pas d'autre moyen avec le type de données bit? Je suis toujours curieux. pouvez-vous expliquer comment stocker la chaîne binaire (pas d'image) en utilisant blob? thx pour vos réponses, jspcal .. :) – putse

1

Hope, ce code peut vous aider:


pour sélection:

 select conv(column_name, from_base, to_base) from table_name 
    //example: 
    select conv(column1, 10, 2) from table1; 

pour insérer:

 insert into table_name(column1) values(B'binary_data') ; 
    //example : 
    insert into table1(column1) values(B'1110000'); 

pour la requête:

select column1,column2 from table_name where column1 & B('binary_data'); 
    //example: 
    select column1, column2 from table1 where column1 & B('1110000');