Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте!
У меня БД MySQL 5.0 картинки(jpg) хранятся не в БД а файловой системе. Пишу программу в Delphi.
Внёс изменения в My.ini, поменял кодировку с Latin1 на utf8 (default-character-set=utf8)
Цель: поддержка русских символов в БД.
Результат: записи с русскими символами отображаются/добавляются корректно, но картинки(jpg) перестали отображаться.
Картинки достаю из БД коммандой:
select load_file('./myNameBD/NameFile.jpg') as BlobF
Подскажите как восстановить просмотр картинок?
Неактивен
Под какой ОС работает MySQL? Судя по select load_file('./myNameBD/NameFile.jpg') - unix like.
Какое значение имеет LANG в запускаемом окружении MySQL ? ответ команды locale из-под пользователя от которого работает MySQL.
То что вы поменяли конфиг не обязательно поменяет кодировку в базе. Посмотрите кодировку у базы, таблице и особенно столбца.
Неактивен
А еще интересно чем не устраивает взять файл у файловой системы напрямую, а не через mysql
Неактивен
1) Операционная система: Windows XP
2) Значение LANG - не знаю. Подскажите комманду в винде как посмотреть?
3) Кодировка БД=Кодировка таблицы=Кодировка столбца = utf8 но как это связано с файлом jpg? ведь он же лежит не в нутри БД а с наружи - в файловой системе.
4) Взять файл на прямую? но как? опишу систему в которой я работаю:
-приложение на Delphi
-MySQL + несколько БД одной структуры (описание картинок храню в БД, а сами картинки jpg в отдельных папках например - C:\Program Files\MySQL\MySQL Server 5.0\data\IMG_1)
-локальные пользователи своих БД
Если указывать такой путь к картинке "C:\Program Files\MySQL\MySQL Server 5.0\data\IMG_1\image.jpg" то приложение будет искать этот файл на компе клиента, а расшаривать эту папку на сервере БД по сети опасно. Поэтому приходится картинку пропускать через сервер БД.
Эксперементировал с файлом my.ini ещё раз:
# SERVER SECTION
default-character-set=latin1
Результат: картинки и показываются, русские символы -????????
# SERVER SECTION
default-character-set=utf8
Результат: картинки не отображаются - ошибка JPEG Error #42, русские символы - отображаются!
Неактивен
Могу сделать предположение, что Ваша программа передает символы в latin1 кодировке.
Смотрите описание библиотеки, чтоб поменять кодировку соединения.
Неактивен
Полностью поддерживаю ораторов, которые говорят, что файлы надо забирать
напрямую. Да, это потребует настройки другого протокола, но — что поделаешь
Что касается немедленного решения Вашей проблемы — Вы изменили кодировку,
и теперь не выполняется условие «кодировка сервера == кодировка соединения».
MySQL, когда читает файл, считает его не BLOB (как Вы бы хотели), а как TEXT.
После этого он обнаруживает, что соединение у Вас ожидает получить данные в
другой кодировке, и перекодирует строку. В качестве быстрого решения — може-
те, например, вернуть кодировку сервера в состояние «как было», проставить
правильные кодировки для всех табличек (ALTER TABLE tablename CONVERT TO
CHARSET utf8), и получите возможность хранить русские буквы при работающих
загрузках, но лучше, всё-таки, загружать картинки не через MySQL.
Неактивен
Всем спасибо, за советы!
Помогло следующее:
//Пардонте, текст из Delphi но я думаю все понятно.
MySQLDatabase.ConnectionCharacterSet := 'latin1';
MySQLQuery.Active := true;
//Вывожу/Показываю картинку(jpg) юзеру
MySQLDatabase.ConnectionCharacterSet := 'utf8';
Примечание:
Тобиш на момент получения картинки из БД я меняю кодировку у клиента на latin1,
далее получаю поток данных BLOB и сливаю его на форму, в конце меняю кодировку
обратно на utf8.
Неактивен
А потом этой программой будут пользоваться люди
Неактивен
paulus написал:
А потом этой программой будут пользоваться люди
Конешна будут, а почему так печально?
Неактивен
Ну, хотя бы потому, что Вы в процессе изначального написания программы
уже делаете костыли вместо того, чтобы придумать и написать изначально
правильно. Ну и разберитесь хотя бы, чем отличается BLOB от строки
Неактивен