Subject | Appropriate uses of COLLATE and CHARSETs...? |
---|---|
Author | Rasmus Olesen |
Post date | 2004-07-05T01:58:05Z |
Hi and thx again to Alexandre for his most useful and clear answer
on my previous question on indicies(Msg 44148)
I'm now cleaning up my existings FB DBs and realized that i had no
clue which CHARSET/COLLATEtion i used, and
select * from RDB$DATABASE
..in the diffrent databases showed me all 'NONE' in the CHARSET
FIELD, aka. the COLLATE default was also 'NONE'.
Now I fiddled with some of the CHARSETS(mostly ISO8859_1 and
WIN1252) due to the fact that most my DBs are MSSQL ports on Windows
and the test/deploy servers for now still runs Windows.
And I also tried out some of the COLLATE'tion orders, but they seem
to all restrict me from inserting Danish and French letters in my
varchar fields, fx.
So : With NONE/NONE everything works fine, but ISO8859_1/
(DA_DA/FR_CA/ISO8859_1(default)) and likewise with WIN1252/WIN1252,
i lost
the ability to insert a Danish-character string of legal size into a
varchar field. More specific, this error msg came up :
---------------
ISC ERROR CODE:335544321
ISC ERROR MESSAGE:
arithmetic exception, numeric overflow, or string truncation
Cannot transliterate character between character sets
---------------
(I got this error msg through Marathon 3, but i don't think it
matters here.)
...and the big Question is :
Why do i get the errormsg ? (I suspect the connection doesn't
connect using the correct charset, but i couldn't prove/disprove it
by trying, i got the same results)
When and how should one use these COLLATE orders and specify
CHARSETs, beyond defaulting to NONE ?
Is it correct to assume that COLLATEs are just there to sort strings
in the right order(acc. to the collation) ?
Reading the IB6 docs, LANGREF.pdf, chap8, p.282, one could also get
the impression that specifing a diffrent CHARSET is just there to
allow backward compatibility( and therefore implicitly shouldn't be
used for new db's)...is it so ?
tia.
/Rasmus
on my previous question on indicies(Msg 44148)
I'm now cleaning up my existings FB DBs and realized that i had no
clue which CHARSET/COLLATEtion i used, and
select * from RDB$DATABASE
..in the diffrent databases showed me all 'NONE' in the CHARSET
FIELD, aka. the COLLATE default was also 'NONE'.
Now I fiddled with some of the CHARSETS(mostly ISO8859_1 and
WIN1252) due to the fact that most my DBs are MSSQL ports on Windows
and the test/deploy servers for now still runs Windows.
And I also tried out some of the COLLATE'tion orders, but they seem
to all restrict me from inserting Danish and French letters in my
varchar fields, fx.
So : With NONE/NONE everything works fine, but ISO8859_1/
(DA_DA/FR_CA/ISO8859_1(default)) and likewise with WIN1252/WIN1252,
i lost
the ability to insert a Danish-character string of legal size into a
varchar field. More specific, this error msg came up :
---------------
ISC ERROR CODE:335544321
ISC ERROR MESSAGE:
arithmetic exception, numeric overflow, or string truncation
Cannot transliterate character between character sets
---------------
(I got this error msg through Marathon 3, but i don't think it
matters here.)
...and the big Question is :
Why do i get the errormsg ? (I suspect the connection doesn't
connect using the correct charset, but i couldn't prove/disprove it
by trying, i got the same results)
When and how should one use these COLLATE orders and specify
CHARSETs, beyond defaulting to NONE ?
Is it correct to assume that COLLATEs are just there to sort strings
in the right order(acc. to the collation) ?
Reading the IB6 docs, LANGREF.pdf, chap8, p.282, one could also get
the impression that specifing a diffrent CHARSET is just there to
allow backward compatibility( and therefore implicitly shouldn't be
used for new db's)...is it so ?
tia.
/Rasmus