Subject x00 in char(1) field affecting number of rows returned
Author Svein Erling Tysvær

Admittedly, I’ve only tested on Firebird 2.5.2 and 2.5.4 and the particular column used has ISO8859_1 for both CHARACTER SET and COLLATION.

 

SELECT distinct MyChar1Field

FROM MyTable

GROUP BY 1

 

returned three rows with what looked like a space, whereas

 

SELECT distinct MyChar1Field

FROM MyTable

 

only returned one such row. A bit closer look at the data revealed that one of the entries actually contained hexadecimal 00 and not space. Changing this one value corrected the error, but I’m still puzzled about this difference. Moreover, similar queries behave similarly different:

 

SELECT distinct MyChar1Field || ‘’

FROM MyTable

GROUP BY 1

returns one row

 

SELECT MyChar1Field || ‘’

FROM MyTable

GROUP BY 1

returns three rows

 

SELECT MyChar1Field || ‘ ’

FROM MyTable

GROUP BY 1

returns three rows

 

SELECT MyChar1Field || ‘ ?’

FROM MyTable

GROUP BY 1

returns one row

 

It is understandable that x00 is treated differently, but it doesn't make sense to me that it makes other records randomly get into one out of two groups, nor do I understand why DISTINCT/GROUP BY should behave differently.


Is this a known issue, or even fixed in newer Firebird versions? I didn’t see anything in the bug tracker, but I didn’t do any thorough search.

Set