|
[Firebird 2.5] [IBExpert 2011.01.12] Точки (код h2E (46)) вместо русских букв
|
|||
---|---|---|---|
#18+
Вопрос: в таблице вместо русских букв точки. Причем это не конфликт отображения, пользуясь встроенным hex-редактором увидел, что в полях таблицы вместо русских букв символы "точка" (шестн. 2E или дес. 46). База данных и поля - charset = NONE, но большинство данных записываются из клиентов под Windows, поэтому сам работаю с базой в IBExpert'е с подключением с кодовой страницей 1251. Подробнее: Есть файл определенной структуры: просто строки подряд, с разделителями. Группы строк разделены символом с кодом 13, а сами строки - 10. Есть запрос в базе на Firebird 2.5. В качестве инструмента использован IBExpert. Запрос добавляет в таблицу строки, полученные при разборе блоба пришедшего в качестве параметра (этот самый файл, описанный выше). Запрос: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65.
Вот определение таблицы: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Если в запросе пройтись отладкой, можно увидеть что все строки существуют и читаемы. То есть в момент передачи параметров insert'у они все правильно выделены из файла. Например name = 'Адыгея', а socr = 'Респ'. Подтверждаем транзакцию, смотрим в таблицу, а там: name = '......', а socr = '....' Как решал: 1. Пробывал соединятся с БД с разными кодировками (NONE, WIN1251) 2. Менял типы данных в таблице и в хранимой процедуре на BLOB'ы, а также менял charset. 3. Вводил доп. пременные, где делал преобразования из одного в другое (cast'ы). 4. Тестировал процедуру SPLITSTRING. Работает корректно, возвращает в читаемом виде куски того же файла. Все это не оправдалось. Код ХП SPLITSTRING Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
Ограничения на решения: так как другие клиенты и функции нормально работают с русскими буквами, мне очень желательно ничего там не менять (не страдать синдромом переустановки виндоус по любому поводу), а разобраться в сути и исправить. Как это решать? В чем может быть проблема? Мучаюсь уже часа 4 :( ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2011, 15:20 |
|
[Firebird 2.5] [IBExpert 2011.01.12] Точки (код h2E (46)) вместо русских букв
|
|||
---|---|---|---|
#18+
точки появляются при попытке применить встроенный блоб-фильтр, преобразующий SUBTYPE BINARY к SUBTYPE TEXT. Домен BLOB_DATA как объявлен? Похоже где-то внутри процедуры KLADR_KLADR_ADD_DATA (или в таблице KLADR_KLADR) он считается текстовым, а внутри процедуры SPLITSTRING он считается бинарным. Сам домен не меняли часом? глобальное решение - перекомпилировать все процедуры. Возможно стоит сделать домен текстовым блобом, если это сейчас не так. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2011, 15:54 |
|
[Firebird 2.5] [IBExpert 2011.01.12] Точки (код h2E (46)) вместо русских букв
|
|||
---|---|---|---|
#18+
Спасибо за интересную идею. Домен объявлен как: Код: plaintext 1. 2.
Проверил как объявлены поля в функции, стер, заново выставил. Очистил предварительно таблицу (для чистоты эксперимента). Перекомпилировал и выполнил KLADR_KLADR_ADD_DATA. Результат - опять точки. В самой таблице - одни VARCHAR'ы, как видно выше. Как нибудь этот фильтр нельзя отключить? Я сам просто не вижу места где бы он мог сам проявится (неявно вызваться). ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2011, 16:02 |
|
|
start [/forum/topic.php?fid=42&tid=1599878]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
153ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 249ms |
0 / 0 |