Вверх ↑
Этот топик читают: Гость
Ответов: 7
Рейтинг: 0
#1: 2019-07-16 12:44:14 ЛС | профиль | цитата
Здравствуйте.

Порылся в темах и не нашел схожей со своей проблемой. Читал только про проблемы с раскодировкой из MySQL, у меня - обратная...

В приложении использую элементы из группы Data Source для работы с базами данных (sqlite, mysql).
Пока использовал sqlite, то особо не заморачивался. Но вот пришел момент, что данными надо поделиться, поэтому решил использовать сервер mysql.

Проблема в следующем: запись и чтение данных из приложения проходят нормально, всё читаемо. Также нормально отображается при использовании утилиты от Tad "dbMySQL". Но если посмотреть на данные сторонним приложением (sqlite browser, heidisql, в консоли mysql, ...), то кириллица уже нечитаема.

Двое суток пробую различные варианты кодировок баз, таблиц, столбцов, коллейты, но, пока что, тщетно. Использование элемента преобразования кодировок (Charset) не спасает, лишь преображает кракозябры.
Обратил внимание, что в любом варианте отправленных данных в БД используется кодировка cp1252, которая, вродь бы, latin1. Изменения настроек БД, типа "set name latin1" или "default-character-set = latin1", "character-set-server = latin1" тоже не спасают.

Приложу скриншотов, так как схема от Tad вполне себе работает, а отправку выполняю простым направлением из элемента "FormatStr" да в элемент "DSC_Exec".

Помогите разобраться, пожалуйста.

2019-07-16_09-33-13.png
2019-07-16_10-13-41.png
2019-07-16_10-14-37.png
2019-07-16_10-15-54.png
карма: 0

0
Главный модератор
Ответов: 2999
Рейтинг: 396
#2: 2019-07-16 13:03:06 ЛС | профиль | цитата
Судя по Вашим скриншотам, надо или сохранять данные в UTF8 или на стороне сервера создавать БД с кодировкой Win1251.
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Ответов: 7
Рейтинг: 0
#3: 2019-07-16 13:44:05 ЛС | профиль | цитата
Спасибо за оперативный ответ!

Скриншоты показывают непонятную мне картину, то есть, почему сервер и базы в кодировке utf8, а "Декодер" определил, что кодировка 1252?

Позвольте еще немного спрошу:
Надо ли поправить конфиг, чтоб и сервер тоже был настроен на 1251?
Можно ли просто изменить кодировку базе данных не создавая?

--- Добавлено в 2019-07-16 14:08:00

Теперь перестали вставляться записи, поэтому прям в утилитке от Tad добавил компонент для выполнения запросов на изменение и оттуда попробовал добавить запись. Ничего не добавилось с возвращенным "0".

Когда же скопировал и вставил текст запроса в HeidiSQL то он уже конкретно ругнулся (не обратил внимания, что при вставке кодировка уже слетела).
Напечатав вручную вместо кракозябр буковки, запрос в HeidiSQL прошел и добавил строку...

2019-07-16_17-03-30.png
2019-07-16_17-02-56.png
2019-07-16_17-02-22.png

И в консоли mysql запрос с кириллицей выдал мне ошибку 1366...
Пойду почитаю про ошибку.

Редактировалось 1 раз(а), последний 2019-07-16 14:08:00
карма: 0

0
Ответов: 4628
Рейтинг: 749
#4: 2019-07-16 14:22:40 ЛС | профиль | цитата
В компонент DS_MySQL, вероятно, надо добавить вызов функции mysql_set_character_set() с передачей ей набора символов, который соответствует текущей кодировке Windows для не-юникодных приложений. Тогда, вероятно, MySQL смог бы корректно преобразовывать данные при записи в таблицы.
карма: 26

0
Ответов: 7
Рейтинг: 0
#5: 2019-07-16 14:42:22 ЛС | профиль | цитата
Жаль, не обладаю знаниями для добавления чего-то...
Пока только пользуюсь с переменным успехом.

Поэкспериментирую тогда с более ранним компонентом dbMySQL, там есть, оказывается, точка для установки Charset.
Но это попозжее, так как котелок на сегодня всю кашу уже сварил )

Отпишусь после экспериментов.
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#6: 2019-07-16 16:13:08 ЛС | профиль | цитата
DiMyxa писал(а):
нормально отображается при использовании утилиты от Tad "dbMySQL".
Несколько раз перечитал тему.
DiMyxa писал(а):
Но если посмотреть на данные сторонним приложением (sqlite browser, heidisql, в консоли mysql, ...), то кириллица уже нечитаема.
Проблема то в чём. Нахрена смотреть "сторонним приложением" ?
Это проблема "сторонних приложений".
В настройках "сторонних приложений" выбери нужное.

http://www.sql.ru/forum/660507/faq-problemy-s-kodirovkoy-v-mysql-versiy-4-1

Редактировалось 1 раз(а), последний 2019-07-16 16:25:05
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 7
Рейтинг: 0
#7: 2019-07-16 18:27:57 ЛС | профиль | цитата
Дык, проблема в том, что мне надо выгружать данные куда-то, чтоб потом из этого куда-то могли смотреть на выгруженное.
Ну, и показать, как смотреть...
При локальном пользовании мне sqlite с головой хватает, пофиг, как там кириллица хранится, обратно в прогу возвращается в нормальном виде.

Может быть, подскажете какой-нибудь вариант? Смотрел в сторону mssql, но так и не дотерпел до понимания, как оно работает.
С mysql работал, просто, в области сайтостроения... но что-то пошло не так...
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#8: 2019-07-16 20:42:14 ЛС | профиль | цитата

Add(MainForm,2953706,21,105)
{
Position=1
Point(onClose)
link(onCreate,6196915:doOpen,[])
link(onClose,6196915:doClose,[])
}
Add(DS_SQLite,6196915,63,119)
{
Name="mTest"
FileName="SQLiteUtf8.db"
link(onOpen,15337521:doEvent1,[])
}
Add(DSC_Exec,3859932,175,119)
{
DSManager="mTest"
link(onExec,12033996:doString,[])
link(SQL,11047836:Text,[])
}
Add(StrList,11047836,175,77)
{
Strings=#27:PRAGMA encoding = "UTF-8"; |32:CREATE TABLE IF NOT EXISTS test(|24: id INTEGER PRIMARY KEY,|11: fio TEXT);|1: |
}
Add(FormatStr,12033996,224,119)
{
Mask="INSERT INTO test values (NULL, "Иванов Иван Иванович");"
link(onFString,12463428:doCharset,[])
}
Add(Charset,12463428,266,119)
{
Type=6
link(onCharset,15836664:doExec,[])
}
Add(DSC_Exec,15836664,308,119)
{
DSManager="mTest"
}
Add(Hub,15337521,133,119)
{
link(onEvent1,3859932:doExec,[])
link(onEvent2,13375599:doQuery,[(161,132)(161,188)])
}
Add(StringTable,710163,308,182)
{
Left=10
Top=65
Width=355
Height=185
Columns=#5:id=50|25:Фамилия Имя Отчество=250 |
}
Add(DSC_Query,13375599,175,182)
{
SQL="SELECT * FROM test;"
DSManager="mTest"
link(onQuery,14088101:doStr,[])
link(onColumns,710163:doClear,[])
}
Add(Charset,3302655,266,182)
{
Type=7
link(onCharset,710163:doAdd,[])
}
Add(MT_String,14088101,224,182)
{
link(onResult,3302655:doCharset,[])
}

карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 952
Рейтинг: 4
#9: 2019-07-16 23:58:31 ЛС | профиль | цитата
Сталкивался с аналогичной проблемой, в итоге перевел свою БД в UTF8.
Наверное это лучший вариант для избежания проблем и вопросов.
карма: 0

0
Главный модератор
Ответов: 2999
Рейтинг: 396
#10: 2019-07-17 06:22:08 ЛС | профиль | цитата
DiMyxa писал(а):
Можно ли просто изменить кодировку базе данных не создавая?

Скорее всего нет. Collation базы задаётся во время её создания. Но никто не мешает копировать данные из одной базы в другую.

Редактировалось 1 раз(а), последний 2019-07-17 08:26:32
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Ответов: 7
Рейтинг: 0
#11: 2019-07-18 08:33:55 ЛС | профиль | цитата
В итоге мучений вывел инфу из базы через php и забил на отображение в сторонних программах.
http://iva.pp.ua/ytadbtest.php

Tad, спасибо за схемку, так и делал у себя.

Прошу пояснить мне ещё один момент, так как не смог до сих пор найти ответ.
Почему элемент "StringTableMT" не добавляет колонку с именем в котором есть символ "_"?
В моем варианте - имя первого столбца "dt_stamp".


Add(MainForm,2953706,21,105)
{
Width=435
Height=359
}
Add(Button,12431240,168,161)
{
Left=25
Top=25
Width=355
Height=30
Caption="Получить данные с удаленного сервера"
link(onClick,1711932:doOpen,[])
}
Add(DS_MySQL,1711932,259,161)
{
Name="ytatest"
Server="185.189.13.173"
Username="yta"
Password="yta"
DBName="db_yta_test"
link(onOpen,16728834:doQuery,[])
}
Add(DSC_Query,16728834,343,161)
{
SQL="SELECT * FROM history_tsshp_4;"
DSManager="ytatest"
link(onQuery,746263:doEvent,[])
link(onColumns,2063503:doMT_AddCols,[])
link(onError,16612068:doMessage,[])
}
Add(StringTableMT,2063503,693,140)
{
Left=30
Top=70
Width=350
Height=230
IconsCheck=[]
MiscIcons=[]
Icons=[]
Point(doMT_Add)
Point(doMT_AddCols)
}
Add(Message,16612068,427,175)
{
Caption="Ошибка при запросе данных"
}
Add(Charset,15211377,588,161)
{
Type=7
link(onCharset,4690827:doEvent,[])
}
Add(MT_String,5857085,511,161)
{
link(onResult,8206959:doEvent,[])
}
Add(Debug,746263,476,161)
{
link(onEvent,5857085:doStr,[])
}
Add(Debug,8206959,560,161)
{
link(onEvent,15211377:doCharset,[])
}
Add(Debug,4690827,637,161)
{
link(onEvent,2063503:doAdd,[(657,167)(657,146)])
}
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#12: 2019-07-18 10:13:37 ЛС | профиль | цитата
DB-файл, полученный моим примером выше, читается любой сторонней программой.
DiMyxa писал(а):
Почему элемент "StringTableMT" не добавляет колонку с именем в котором есть символ "_"?

Наверное потому, что символ "_" используется самим компонентом.
nesco об этом расскажет точнее.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 7
Рейтинг: 0
#13: 2019-07-18 10:58:04 ЛС | профиль | цитата
Огромное спасибо за участие и подсказки!
карма: 0

0
Ответов: 59
Рейтинг: 0
#14: 2022-01-05 21:05:31 ЛС | профиль | цитата
Кириллицу исправить видимо нельзя, т.к. сам Hiasm в своих локальных базах использует кодировку ANSI. И кроме самого Hiasm этот текст никто прочесть не может (везде кракозябра) Я уже перепробовал кучу различных кодировок как самой базы, так и у элемента изменения кодировки. Кириллица не отображается..
карма: 0

0
Ответов: 263
Рейтинг: 18
#15: 2022-01-06 06:25:37 ЛС | профиль | цитата
Я в своих схемах использую преобразование кодировки перед и после запроса. Правда БД SQLite, с кодировкой UTF8.


Add(FormatStr,15042645,126,133)
{
DataCount=0
Mask="SELECT ID, (SELECT Name FROM City WHERE City.ID = Gorod) AS Gorod, Adres, (SELECT Alko FROM AMinfo WHERE Object.ID = Object_ID) AS KPP,\r\n(SELECT Data_o_Gost FROM ser_egais WHERE ser_egais.Object_ID = Object.ID) AS GOST,\r\n(SELECT Data_o_Fsrar FROM ser_egais WHERE ser_egais.Object_ID = Object.ID) AS FSRAR\r\nFROM Object WHERE KPP LIKE '_________' AND Stat = 'Действует' ORDER BY GOST"
link(onFString,5568733:doCharset,[])
}
Add(Charset,5568733,175,133)
{
Type=6
link(onCharset,7753949:doQuery,[])
}
Add(DSC_Query,7753949,224,133)
{
@Color=43520
DSManager="parent.parent.bd"
link(onQuery,12653439:doStr,[])
}
Add(MT_String,12653439,273,133)
{
link(onResult,501211:doCharset,[])
}
Add(Charset,501211,322,133)
{
Type=7
}

карма: 3

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)