SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 14.01.2011 06:07:54

agentbond007
Участник
Зарегистрирован: 14.01.2011
Сообщений: 4

JPEG перестал открываться

Здравствуйте!
У меня БД MySQL 5.0 картинки(jpg) хранятся не в БД а файловой системе. Пишу программу в Delphi.
Внёс изменения в My.ini, поменял кодировку с Latin1 на utf8 (default-character-set=utf8)
Цель: поддержка русских символов в БД.
Результат: записи с русскими символами отображаются/добавляются корректно, но картинки(jpg) перестали отображаться.
Картинки достаю из БД коммандой:
select load_file('./myNameBD/NameFile.jpg') as BlobF
Подскажите как восстановить просмотр картинок?

Неактивен

 

#2 14.01.2011 16:19:16

Tsvetkov
Участник
Зарегистрирован: 08.01.2011
Сообщений: 14

Re: JPEG перестал открываться

Под какой ОС работает MySQL? Судя по select load_file('./myNameBD/NameFile.jpg') - unix like.
Какое значение имеет  LANG  в запускаемом окружении MySQL ? ответ команды locale из-под пользователя от которого работает MySQL.
То что вы поменяли конфиг не обязательно поменяет кодировку в базе. Посмотрите кодировку у базы, таблице и особенно столбца.

Неактивен

 

#3 14.01.2011 16:49:44

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Re: JPEG перестал открываться

А еще интересно чем не устраивает взять файл у файловой системы напрямую, а не через mysql

Неактивен

 

#4 14.01.2011 18:15:54

agentbond007
Участник
Зарегистрирован: 14.01.2011
Сообщений: 4

Re: JPEG перестал открываться

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, русские символы - отображаются!

Неактивен

 

#5 14.01.2011 20:52:17

Tsvetkov
Участник
Зарегистрирован: 08.01.2011
Сообщений: 14

Re: JPEG перестал открываться

Могу сделать предположение, что Ваша программа передает символы в latin1 кодировке.
Смотрите описание библиотеки, чтоб поменять кодировку соединения.

Неактивен

 

#6 14.01.2011 23:17:35

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: JPEG перестал открываться

Полностью поддерживаю ораторов, которые говорят, что файлы надо забирать
напрямую. Да, это потребует настройки другого протокола, но — что поделаешь smile

Что касается немедленного решения Вашей проблемы — Вы изменили кодировку,
и теперь не выполняется условие «кодировка сервера == кодировка соединения».
MySQL, когда читает файл, считает его не BLOB (как Вы бы хотели), а как TEXT.
После этого он обнаруживает, что соединение у Вас ожидает получить данные в
другой кодировке, и перекодирует строку. В качестве быстрого решения — може-
те, например, вернуть кодировку сервера в состояние «как было», проставить
правильные кодировки для всех табличек (ALTER TABLE tablename CONVERT TO
CHARSET utf8), и получите возможность хранить русские буквы при работающих
загрузках, но лучше, всё-таки, загружать картинки не через MySQL.

Неактивен

 

#7 15.01.2011 12:23:27

agentbond007
Участник
Зарегистрирован: 14.01.2011
Сообщений: 4

Re: JPEG перестал открываться

Всем спасибо, за советы!

Помогло следующее:
//Пардонте, текст из Delphi но я думаю все понятно.
MySQLDatabase.ConnectionCharacterSet := 'latin1';
MySQLQuery.Active := true;
//Вывожу/Показываю картинку(jpg) юзеру
MySQLDatabase.ConnectionCharacterSet := 'utf8';

Примечание:
Тобиш на момент получения картинки из БД я меняю кодировку у клиента на latin1,
далее получаю поток данных BLOB и сливаю его на форму, в конце меняю кодировку
обратно на utf8.

Неактивен

 

#8 15.01.2011 22:21:21

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: JPEG перестал открываться

А потом этой программой будут пользоваться люди sad

Неактивен

 

#9 16.01.2011 06:39:33

agentbond007
Участник
Зарегистрирован: 14.01.2011
Сообщений: 4

Re: JPEG перестал открываться

paulus написал:

А потом этой программой будут пользоваться люди sad

Конешна будут, а почему так печально?

Неактивен

 

#10 16.01.2011 13:28:30

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: JPEG перестал открываться

Ну, хотя бы потому, что Вы в процессе изначального написания программы
уже делаете костыли вместо того, чтобы придумать и написать изначально
правильно. Ну и разберитесь хотя бы, чем отличается BLOB от строки sad

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson