Robert R.: SELECT auf einzelne bytes in BINARY(N)

Beitrag lesen

Liebe Mitdenker,
liebe Wissende,
liebe Neugierige,

ja!

ich habe eine mySQL Tabelle mit einer Spalte "data" vom Typ BINARY(127) und würde jetzt gerne die Bytes 0-3 von den Zeilen selektieren, bei denen Byte 2 = 0x88 ist.
Wie macht man das?

SELECT

HEX(SUBSTR(data,1,1)),
HEX(SUBSTR(data,2,1)),
HEX(SUBSTR(data,3,1)),
HEX(SUBSTR(data,4,1))
FROM
raw
WHERE
HEX(SUBSTR(data,3,1)) = HEX(0x88)


>   
> Das tut zwar, aber sieht unschön aus und ist auch recht umständlich. Geht das eleganter?  
> Ausserdem ist ein Index auf der Spalte - wird der mit SUBSTR() noch korrekt genutzt?  
>   
> Wie sieht es aus, wenn ich die Bytes 0 und 1 zusammen gerne als 16 bit Integer selektieren wollen würde?  
  
Ich frag nur mal aus Neugier:  
Was hast Du vor mit der Teillösung?  
  
Ein Index über eine (Var)Binary-Spalte wird bis maximal 1000 Bytes Breite des Index geführt (MySQL 5.5) und auch verwendet, solange der Optimizer erkennen kann, dass dies einen Vorteil bietet. Bei Zugriff auf Werte, die nicht "vorne" beginnen, ist dies nicht möglich, da die gar nicht in den Index aufgenommen worden sind.  
  
Es bietet sich an, sich Datenbankfunktionen für die Zugriffe und Selektionen zu erstellen, deren Rückgabeergebnisse auf die verwendete API angepasst sind. Da muss man eventuell dann die interne Darstellung (Little-Endian / Big-Endian) berücksichtigen.  
  
  
  
  
Spirituelle Grüße  
Euer Robert

-- 
Möge der Forumsgeist wiederbelebt werden!