22.02.2017, 14:41 | #1 |
Участник
|
Ax 2009 Unicode
Привет всем.
Словили странный баг под 2009-й аксаптой. Ядро RU7 (build 5.0.1500.4570) или build 5.0.1600.3596 БД оракл. Ходит под линуксом. В текстовое поле записываем текст на французском, все символы с диакритикой ее теряют. т.е. сохраняем строчку àéç она превращается в aec Непонятно почему так. Если сторонним средством (например PL SQL DEVELOPER) записать текст в базу напрямую, то в базу значение запишется, но аксапта при отображении срезает все надстрочные символы. Т.е. значение портится как при записи в БД так и при чтении. При этом если табличка кешируется, то в кеше значения корректно отображаются и могут поначалу ввести в заблуждение, но стоит сбросить кеш и получить значение из БД, как получаем кривые значения. В чем может быть причина ? Последний раз редактировалось Logger; 22.02.2017 в 15:12. |
|
22.02.2017, 14:46 | #2 |
Участник
|
Параметры БД
X++: select * from nls_database_parameters NLS_RDBMS_VERSION = 12.1.0.2.0 NLS_NCHAR_CONV_EXCP = FALSE NLS_LENGTH_SEMANTICS = BYTE NLS_COMP = BINARY NLS_DUAL_CURRENCY = $ NLS_TIMESTAMP_TZ_FORMAT = DD-MON-RR HH.MI.SSXFF AM TZR NLS_TIME_TZ_FORMAT = HH.MI.SSXFF AM TZR NLS_TIMESTAMP_FORMAT = DD-MON-RR HH.MI.SSXFF AM NLS_TIME_FORMAT = HH.MI.SSXFF AM NLS_SORT = BINARY NLS_DATE_LANGUAGE = AMERICAN NLS_DATE_FORMAT = DD-MON-RR NLS_CALENDAR = GREGORIAN NLS_NUMERIC_CHARACTERS = ., NLS_NCHAR_CHARACTERSET = UTF8 NLS_CHARACTERSET = CL8MSWIN1251 NLS_ISO_CURRENCY = AMERICA NLS_CURRENCY = $ NLS_TERRITORY = AMERICA NLS_LANGUAGE = AMERICAN |
|
22.02.2017, 14:54 | #3 |
Участник
|
Сбацал класс для просмотра настроек - во вложении.
Выводит так: select * from nls_database_parameters NLS_RDBMS_VERSION = "12.1.0.2.0" NLS_NCHAR_CONV_EXCP = "FALSE" NLS_LENGTH_SEMANTICS = "BYTE" NLS_COMP = "BINARY" NLS_DUAL_CURRENCY = "$" NLS_TIMESTAMP_TZ_FORMAT = "DD-MON-RR HH.MI.SSXFF AM TZR" NLS_TIME_TZ_FORMAT = "HH.MI.SSXFF AM TZR" NLS_TIMESTAMP_FORMAT = "DD-MON-RR HH.MI.SSXFF AM" NLS_TIME_FORMAT = "HH.MI.SSXFF AM" NLS_SORT = "BINARY" NLS_DATE_LANGUAGE = "AMERICAN" NLS_DATE_FORMAT = "DD-MON-RR" NLS_CALENDAR = "GREGORIAN" NLS_NUMERIC_CHARACTERS = ".," NLS_NCHAR_CHARACTERSET = "UTF8" NLS_CHARACTERSET = "CL8MSWIN1251" NLS_ISO_CURRENCY = "AMERICA" NLS_CURRENCY = "$" NLS_TERRITORY = "AMERICA" NLS_LANGUAGE = "AMERICAN" SELECT * FROM nls_session_parameters NLS_LANGUAGE = "AMERICAN" NLS_TERRITORY = "AMERICA" NLS_CURRENCY = "$" NLS_ISO_CURRENCY = "AMERICA" NLS_NUMERIC_CHARACTERS = ".," NLS_CALENDAR = "GREGORIAN" NLS_DATE_FORMAT = "DD-MON-RR" NLS_DATE_LANGUAGE = "AMERICAN" NLS_SORT = "BINARY" NLS_TIME_FORMAT = "HH.MI.SSXFF AM" NLS_TIMESTAMP_FORMAT = "DD-MON-RR HH.MI.SSXFF AM" NLS_TIME_TZ_FORMAT = "HH.MI.SSXFF AM TZR" NLS_TIMESTAMP_TZ_FORMAT = "DD-MON-RR HH.MI.SSXFF AM TZR" NLS_DUAL_CURRENCY = "$" NLS_COMP = "BINARY" NLS_LENGTH_SEMANTICS = "BYTE" NLS_NCHAR_CONV_EXCP = "FALSE" SELECT * FROM nls_instance_parameters NLS_LANGUAGE = "AMERICAN" NLS_TERRITORY = "AMERICA" NLS_SORT = "" NLS_DATE_LANGUAGE = "" NLS_DATE_FORMAT = "" NLS_CURRENCY = "" NLS_NUMERIC_CHARACTERS = "" NLS_ISO_CURRENCY = "" NLS_CALENDAR = "" NLS_TIME_FORMAT = "" NLS_TIMESTAMP_FORMAT = "" NLS_TIME_TZ_FORMAT = "" NLS_TIMESTAMP_TZ_FORMAT = "" NLS_DUAL_CURRENCY = "" NLS_COMP = "BINARY" NLS_LENGTH_SEMANTICS = "BYTE" NLS_NCHAR_CONV_EXCP = "FALSE" Последний раз редактировалось Logger; 22.02.2017 в 15:07. |
|
22.02.2017, 15:13 | #4 |
Moderator
|
Не уверен что это все еще работает для DAX2009 (это такой пережиток времен 2.1), но в моем axsysen-us.ktd и axsysru.ktd есть такая замечательная строчка:
Цитата:
#97
>TC_COLSEQ >Definition of collating sequence mapping >This table is used when sorting letters and strings >First line is the letters to be mapped >Second line is the corresponding letter to map to AàáâãäÀÁÂÃÄBCçÇDEèéêëÈÉÊËFGHIìíîïÌÍÎÏJKLMNñÑOòóôõöÒÓÔÕÖPQRSTUùúûüÙÚÛÜVWXYýÝZæøåÆØÅ aaaaaaaaaaabcccdeeeeeeeeefghiiiiiiiiijklmnnnooooooooooopqrstuuuuuuuuuvwxyyyz~¦Ç~¦Ç Последний раз редактировалось fed; 22.02.2017 в 15:21. |
|
|
За это сообщение автора поблагодарили: Logger (49). |
22.02.2017, 15:53 | #5 |
Участник
|
Цитата:
Чо-то не сработало Попробовал просто значение удалить - тоже не сработало. Похоже в Exe-ник зашили. Или настройка в БД не та. |
|
22.02.2017, 16:04 | #6 |
Участник
|
Просканировал ax32Serv.exe
Нашел рядышком 2 эти строки. Похоже их вкомпилили в Exe-ник а KTD уже не используется. Попробую пропатчить exe-ник. Надеюсь помогет. |
|
22.02.2017, 19:20 | #7 |
Участник
|
не знаю, в чем причина, но могу подтвердит, что моя 2009 нормално отображала все французские символы (писал транслитом, так что пропали мягкие знаки)
__________________
Felix nihil admirari |
|
22.02.2017, 21:26 | #8 |
Участник
|
|
|
23.02.2017, 11:15 | #9 |
Участник
|
Попробовал патчить Exe и ktd
Не помогает. |
|
23.02.2017, 11:42 | #10 |
Moderator
|
А не пробовали аналогичный эксперимент поставить над временной таблицей, которая гарантировано не в Оракле живет ?
|
|
23.02.2017, 13:16 | #11 |
Участник
|
Цитата:
Т.е. обходной путь - использовать мемо. |
|
|
За это сообщение автора поблагодарили: Logger (49). |
23.02.2017, 16:39 | #12 |
Участник
|
|
|
23.02.2017, 16:40 | #13 |
Участник
|
Цитата:
Точно работает! А как вы догадались ? Что-то припоминаю из документации что у мемо полей внутри кодировка может отличаться от основной и все вроде работало. Надо поискать. Заодно может станет понятно, как сделать для обычных или почему это нельзя сделать. |
|
24.02.2017, 09:49 | #14 |
Moderator
|
Я бы еще посоветовал в AOS в регистре попробовать прописать NLS_LANG=russian_russia.UTF8. И посмотреть что после этого получиться...
Кстати - никогда не ставил DAX2009 на оракле и даже не знаю, какие там строковые поля используются - VARCHAR или NVARCHAR? |
|
|
За это сообщение автора поблагодарили: Logger (8). |
27.02.2017, 09:56 | #15 |
Участник
|
|
|
02.03.2017, 10:13 | #16 |
Участник
|
|
|
02.03.2017, 10:14 | #17 |
Участник
|
|
|
Теги |
unicode, utf8, оракл |
|
|