
|
If you were logged in you would be able to see more operations.
|
|
|
|
Environment:
|
WinXP
|
|
Issue Links:
|
Relate
|
|
This issue relate to:
|
|
CORE-3045
"conversion error from string" after change of field type from BIGINT to VARCHAR(21)
|
|
|
|
|
|
This issue is related to:
|
|
|
|
|
|
|
|
|
* First create table/column with domain using case sensitive collation and insert some data:
CREATE DOMAIN D_1250 VARCHAR(10) CHARACTER SET WIN1250 COLLATE WIN1250;
CREATE TABLE T (I INTEGER, A D_1250);
INSERT INTO T VALUES(10, 'a');
COMMIT;
SELECT * FROM T WHERE A='A';
Records affected: 0
So far o.k.
* And now alter the column to use domain with case insensitive collation:
CREATE DOMAIN D_CZ VARCHAR(10) CHARACTER SET WIN1250 COLLATE WIN_CZ;
ALTER TABLE T ALTER A TYPE D_CZ;
But as you can see here, the new collation is not used:
SELECT * FROM T WHERE A='A';
Records affected: 0
Although there are now two record formats in RDB$FORMATS,
the engine use values from the old one (because this format is used to store our data)
and does not convert data to new format.
Here, simple dummy update will "fix" it:
UPDATE T SET I=I;
SELECT * FROM T WHERE A='A';
I A
=========== ==========
10 a
Records affected: 1
|
|
Description
|
* First create table/column with domain using case sensitive collation and insert some data:
CREATE DOMAIN D_1250 VARCHAR(10) CHARACTER SET WIN1250 COLLATE WIN1250;
CREATE TABLE T (I INTEGER, A D_1250);
INSERT INTO T VALUES(10, 'a');
COMMIT;
SELECT * FROM T WHERE A='A';
Records affected: 0
So far o.k.
* And now alter the column to use domain with case insensitive collation:
CREATE DOMAIN D_CZ VARCHAR(10) CHARACTER SET WIN1250 COLLATE WIN_CZ;
ALTER TABLE T ALTER A TYPE D_CZ;
But as you can see here, the new collation is not used:
SELECT * FROM T WHERE A='A';
Records affected: 0
Although there are now two record formats in RDB$FORMATS,
the engine use values from the old one (because this format is used to store our data)
and does not convert data to new format.
Here, simple dummy update will "fix" it:
UPDATE T SET I=I;
SELECT * FROM T WHERE A='A';
I A
=========== ==========
10 a
Records affected: 1
|
Show » |
|