Firebird-russian - Як здійснюється перекодування символів
| Classic | List | Threaded |
Як здійснюється перекодування символів?
Є таке запитання. База FB2, кодування та всі поля CHARACTER SET NONE.
Працюю через .NET провайдер (тобто всередині програми все в юнікод). Потрібна підтримка всього двох мов (німецька та англійська).
Одна з функцій програми - зчитувати рядки з XML і записувати їх у базу , а при наступних зчитуваннях порівнювати з раніше записаними рядками.
Проблема в тому, що ми виявили, що якщо записати рядок з умляутами в базу, а потім вважати її і порівняти з вихідною, то рядки будуть різними.
Ми намагалися цю справу дебакувати локально, але в нас українська вінда і всі умляути заміняться на українські літери і як би ми ще можемо здогадатися чому, а ось на німецькому сервері локаль німецька стоїть, але рядки все і не рівні якогось хрону.
Чи може хтось прояснити алгоритм усіх цих пеєркодувань?
А що означає в релізних нотах:
1) З іншим типом параметрів, конверсія is performed as CHARSET1-UNICODE-CHARSET2.
2) З NONE/OCTETS копіювати копії: NONE/OCTETS-CHARSET2 і CHARSET1-NONE/OCTETS.
Я намагався до бази підключитися з чарсетом UTF8 - все підключилося. Але коли в запиті намагаюся написати CAST("Field" AS VARCHAR(. ) CHARACTER SET UTF8), то воно обламується на умляутах з повідомленням типу: string not well formated
3) Як можна використовувати це: Когда параметри набору CHAR або VARCHAR column є будь-яким, але NONE або OCTETS і налаштування параметра набору не є NONE, sqlsubtype member of an XSQLVAR позначення, що column now contains the attachment (connection) character set number instead of the column's character set.