Den 2018-09-18 kl. 09:00, skrev Kjell Rilbe:

I've been using Firebird since a long time, using quoted identifiers with Swedish characters åäö in them. I am now at version 3.0.3 (on Windows Server 2016, 64 bit).

Now I tried this code in C# using FirebirClient

Dictionary<string, FbTransactionBehavior> locks = new Dictionary<string, FbTransactionBehavior>() {   { "KörningInstans", FbTransactionBehavior.Protected | FbTransactionBehavior.LockWrite },   { "Körning", FbTransactionBehavior.Protected | FbTransactionBehavior.LockWrite }
FbTransaction trans = connection.BeginTransaction(new FbTransactionOptions() {
  LockTables = locks,
  TransactionBehavior = FbTransactionBehavior.Consistency | FbTransactionBehavior.Write

The BeginTransaction call fails with an exception "arithmetic exception, numeric overflow, or string truncation Cannot transliterate character between character sets". Error code in the exception is 335544321. SQLSTATE 22000. It contains 3 errors:
1. type 1, error code 335544321, no message.
2. type 1, error code 335544565, no message.
3. type 0, error code 335544321, message "arithmetic exception, numeric overflow, or string truncation\r\nCannot transliterate character between character sets".

The database is created like this in isql:
create database 'KorningarDev' user DEV password '***' page_size 4096 set names 'UTF8' default character set UTF8 collation UNICODE;

And the connection string looks like this:;Port=3050;Database=KorningarDev;Charset=UTF8;User=DEV;Password=***

So, I see no reason why there would be any transliteratio problems: Windows unicode -> UTF8, and then UTF8 all the way, right?

What might be going on here? Anything I might be doing wrong? Bug in .NET FirebirdClient? Bug in Firebird itself?

Kjell Rilbe

In firebird-devel, Mark Rotteveel pointed out that the .NET provider seems to use Encoding.Default for TPB, which is not a good choice, considering it's system dependent. I assume TPB want a specific encoding, regardless of client platform.

Please consider replacing with Encoding.UTF8, as indicated in the same firebird-devel thread, for all strings in TPB.

Also, please consider replacing ALL string.ToUpper() and other string methods with methods that use a well defined (not platform dependent) encoding, i.e. string.ToUpperInvariant(). string.ToUpper() also uses Encoding.Default, an so has the same problems as with TPB above.

Finally, when designing test cases, I hope support for non-ascii characters in various places are considered and covered.

I wish I could help out better, i.e. fix stuff myslef and submit pull requests, but I'm afraid I would need to study the innards of FIrebird communication a few years before being able to fix more than I destroy. :-)


<<attachment: kjell_rilbe.vcf>>

Firebird-net-provider mailing list

Reply via email to