I am trying to undestand why the below query is returning extra space after '3'. This is a screenshot from on of the SQL quizes available online. I would expect 'C' to be the correct answer. Is there anything that causes the extra space or might it be an error in the task?
CodePudding user response:
The char
type always stores data for all of the allocated space. Therefore a char(5)
, if it's not null
, will always have 5
characters. If you store one character in the field the remaining four will be spaces.
Therefore the actual result will look like this:
King Kong (3 )
But in the context of HTML, multiple whitespace characters in sequence render by default as a single space, so you see this on the screen:
King Kong (3 )
To fix this to get the expected King Kong (3)
, you could use varchar(5)
instead of char(5)
or alternatively call rtrim()
before the final concatenation.
CodePudding user response:
This is misleading because the answers are not displayed in such a way that whitespace is preserved, probably unintentionally. (Right-click the answer and use "inspect element" to see what it is actually supposed to be.)
The answer should have been King Kong (3 )
- that is, four spaces and not one - but by rendering this in HTML (without white-space: pre-wrap;
or a similar CSS rule), the whitespace was collapsed to one space.
The reason for there being four spaces is due to casting the number to char(5)
, i.e. a five-character-long string. Since the number 3
will need only one character to be displayed, the remaining four characters in the string will be filled with spaces, so that the total length of 3
is still five characters as it was specified.