FirebirdSQL / firebird

Firebird server, client and tools
https://firebirdsql.org
1.26k stars 217 forks source link

'Malformed string' or 'Cannot transliterate character between character sets' with non ASCII char #8244

Open Fab8573 opened 2 months ago

Fab8573 commented 2 months ago

Hello,`

Issue: "Malformed String" with Non-ASCII Characters in Numeric or Timestamp Fields on Firebird Database

This issue occurs in any version of Firebird when using non-ASCII characters in a numeric or timestamp field.

It can be easily reproduced using the sample EMPLOYEE.FDB database :

SELECT * FROM EMPLOYEE r where hire_date like '%€%'

The same problem occurs with any non-ASCII character for example '£', 'é' or '²' etc...

However, using a standard ASCII string works fine:

SELECT * FROM EMPLOYEE r where hire_date like '%ytrytrytyn$trbtrytr$$$ybrtjury%' => Work fine

aafemt commented 2 months ago

Database charset in this case is irrelevant. Strings are converted using connection charset. What was connection charset in your examples?

Fab8573 commented 2 months ago

With default EMPLOYEE.FDB if Connection Charset = NONE error is 'Malformed String' if Connection Charset = UTF8 or Charset = WIN1252 error is 'Arithmetic exception, numeric overflow, or string truncation: Cannot transliterate character between character sets'

Same problem if EMPLOYEE.FDB is recreated with UTF8 or WIN1252 character sets. Error will be 'Arithmetic exception, numeric overflow, or string truncation: Cannot transliterate character between character sets'

Problem is : In any case Firebird try do an ASCII conversion for non alphanumeric fields comparison. Why ?