AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.02.2017, 14:41   #1  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,875 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
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  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,875 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 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  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,875 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Сбацал класс для просмотра настроек - во вложении.

Выводит так:
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"
Вложения
Тип файла: zip Class_GRD_ORA_viewParams.zip (906 байт, 84 просмотров)

Последний раз редактировалось Logger; 22.02.2017 в 15:07.
Старый 22.02.2017, 15:13   #4  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,892 / 5650 (194) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Не уверен что это все еще работает для 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~¦Ç~¦Ç
И есть у меня подозрение, что именно эта настройка заставляет ваш сервер и клиент вырубать акценты. Попробуйте первую строчку скопировать во вторую и подменить ktd-файлы и на сервере и на клиенте.

Последний раз редактировалось fed; 22.02.2017 в 15:21.
За это сообщение автора поблагодарили: Logger (49).
Старый 22.02.2017, 15:53   #5  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,875 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от fed Посмотреть сообщение
И есть у меня подозрение, что именно эта настройка заставляет ваш сервер и клиент вырубать акценты. Попробуйте первую строчку скопировать во вторую и подменить ktd-файлы и на сервере и на клиенте.
Попробовал.
Чо-то не сработало
Попробовал просто значение удалить - тоже не сработало. Похоже в Exe-ник зашили. Или настройка в БД не та.
Старый 22.02.2017, 16:04   #6  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,875 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Просканировал ax32Serv.exe
Нашел рядышком 2 эти строки.
Похоже их вкомпилили в Exe-ник а KTD уже не используется.
Попробую пропатчить exe-ник. Надеюсь помогет.
Старый 22.02.2017, 19:20   #7  
wojzeh is offline
wojzeh
Участник
Аватар для wojzeh
Соотечественники
 
672 / 512 (19) +++++++
Регистрация: 27.04.2006
Адрес: Montreal
не знаю, в чем причина, но могу подтвердит, что моя 2009 нормално отображала все французские символы (писал транслитом, так что пропали мягкие знаки)
__________________
Felix nihil admirari
Старый 22.02.2017, 21:26   #8  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,875 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от wojzeh Посмотреть сообщение
не знаю, в чем причина, но могу подтвердит, что моя 2009 нормално отображала все французские символы (писал транслитом, так что пропали мягкие знаки)
А БД какая была ? Оракл ?
Попросил друзей под SQL проверить - там все нормально.
Старый 23.02.2017, 11:15   #9  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,875 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Попробовал патчить Exe и ktd
Не помогает.
Старый 23.02.2017, 11:42   #10  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,892 / 5650 (194) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
А не пробовали аналогичный эксперимент поставить над временной таблицей, которая гарантировано не в Оракле живет ?
Старый 23.02.2017, 13:16   #11  
dn is offline
dn
Участник
Самостоятельные клиенты AX
 
486 / 159 (6) ++++++
Регистрация: 26.03.2003
Адрес: Москва
Цитата:
Сообщение от Logger Посмотреть сообщение
БД оракл.

В текстовое поле записываем текст на французском, все символы с диакритикой ее теряют.
т.е. сохраняем строчку
àéç
она превращается в
aec

В чем может быть причина ?
Попробовал - воспроизводится для обычных строковых полей. Но в случае мемо поля работает корректно.

Т.е. обходной путь - использовать мемо.
За это сообщение автора поблагодарили: Logger (49).
Старый 23.02.2017, 16:39   #12  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,875 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от fed Посмотреть сообщение
А не пробовали аналогичный эксперимент поставить над временной таблицей, которая гарантировано не в Оракле живет ?
Поставил эксперимент. С времянками все отлично работает.
Старый 23.02.2017, 16:40   #13  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,875 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от dn Посмотреть сообщение
Попробовал - воспроизводится для обычных строковых полей. Но в случае мемо поля работает корректно.

Т.е. обходной путь - использовать мемо.
Да !
Точно работает!
А как вы догадались ?
Что-то припоминаю из документации что у мемо полей внутри кодировка может отличаться от основной и все вроде работало. Надо поискать.
Заодно может станет понятно, как сделать для обычных или почему это нельзя сделать.
Старый 24.02.2017, 09:49   #14  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,892 / 5650 (194) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Я бы еще посоветовал в AOS в регистре попробовать прописать NLS_LANG=russian_russia.UTF8. И посмотреть что после этого получиться...
Кстати - никогда не ставил DAX2009 на оракле и даже не знаю, какие там строковые поля используются - VARCHAR или NVARCHAR?
За это сообщение автора поблагодарили: Logger (8).
Старый 27.02.2017, 09:56   #15  
dn is offline
dn
Участник
Самостоятельные клиенты AX
 
486 / 159 (6) ++++++
Регистрация: 26.03.2003
Адрес: Москва
Цитата:
Сообщение от fed Посмотреть сообщение
какие там строковые поля используются - VARCHAR или NVARCHAR?
У нас используется:
строковый тип - NVARCHAR2
для мемо - NCLOB
Старый 02.03.2017, 10:13   #16  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,875 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от dn Посмотреть сообщение
У нас используется:
строковый тип - NVARCHAR2
для мемо - NCLOB
аналогично
Старый 02.03.2017, 10:14   #17  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,875 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от fed Посмотреть сообщение
Я бы еще посоветовал в AOS в регистре попробовать прописать NLS_LANG=russian_russia.UTF8. И посмотреть что после этого получиться...
Попробовали.
Не помогло. Похоже проблема все-таки в ядре аксапты.
Теги
unicode, utf8, оракл

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
emeadaxsupport: AX Performance Troubleshooting Checklist Part 2 Blog bot DAX Blogs 0 09.09.2014 16:11
semanticax: Dynamics AX 2009 Installation - Application Blog bot DAX Blogs 0 22.12.2010 08:11
mbsturk: Ax 2009 Rollup 4 Version Checker Blog bot DAX Blogs 0 29.04.2010 17:05
emeadaxsupport: List of fixes that improve performance of certain features in Dynamics AX 2009 Blog bot DAX Blogs 0 13.10.2009 19:06
Dynamics AX Sustained Engineering: Microsoft Dynamics AX 4.0 and AX 2009 are compatible with Microsoft Windows 7 and Microsoft Windows Server 2008 R2 Blog bot DAX Blogs 0 22.09.2009 04:06

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 15:09.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.