Программное обеспечение ERP нашей компании хранит фотографии сотрудников в виде блобов в нашей базе данных MSSQL.
Моя задача состоит в том, чтобы найти способ хранения изображений в одной и той же таблице базы данных таким образом, чтобы их можно было отображать в программе ERP.
Попробуйте # 1
$content = file_get_contents('my_path\my_file.png');
INSERT INTO my_table VALUES (CAST('{$data}' AS varbinary(max)))
выдает эту ошибку:
SQLSTATE[IMSSP]: An error occurred translating the query string to UTF-16
Проверка моей кодировки:
mb_internal_encoding()
- это UTF-8, однако
mb_detect_encoding($content, 'UTF-8, ISO-8859-1', true)
- это ISO-8859-1.
Попробуйте # 2
Преобразование кодировки содержимого в UTF-8:
$content = file_get_contents('my_path\my_file.png');
$data = iconv('', 'UTF-8//TRANSLIT', $content);
INSERT INTO my_table VALUES (CAST('{$data}' AS varbinary(max)))
РАБОТАЕТ для маленького черного квадратного изображения.
Попытка сделать это на маленьком красном квадратном изображении, однако, приводит к этой ошибке:
iconv(): Detected an illegal character in input string
Попробуйте # 3 (a / b / c)
Множество способов перевести или просто избавиться от этих нелегальных символов:
$data = iconv('', 'UTF-8//IGNORE', $content);
$data = base64_encode($data);
$data = mb_convert_encoding($data, 'UTF-8', 'ISO-8859-1');
Разрешить из них позволяет нам сохранять в базе данных, но это не помогает нам, потому что данные изменяются и программа ERP не может их прочитать.
Другие опции
Мы думали о
BulkColumn FROM OPENROWSET(Bulk‘ C: \temp\ nextup.jpg’, SINGLE_BLOB) AS BLOB
способ вставить файл в базу данных, но отклонил его, поскольку он требует, чтобы мы сначала сохранили файл на диске сервера базы данных, что мы не хотим делать.
Вопрос
Тогда остается вопрос: как загрузить загруженный файл изображения в наше поле UTF-16 без изменения содержимого?