Работа с blob-типом данных sqlite с помощью php pdo
Содержание:
- Типы файлов BLOB
- Запись BLOB в таблицу
- Using the Code
- Числовые типы
- Как удалить кэш миниатюр?
- Резюме файла OBB
- Шаг 3 — Отображение информации о продуктах из базы данных MySQL
- Image to blob
- Как удалить кэш миниатюр?
- SQL Server Data Types
- Microsoft Access Data Types
- micro_thumbnail_blob.0 и подобные — что это за файлы?
Типы файлов BLOB
Ассоциация основного файла BLOB
.BLOB
Формат файла: | .blob |
Тип файла: | Valve Steam Archive |
Расширение файла BLOB является файл данных, который ссылается паровой клапан корпорации. Паровой Valve Corporation является интерактивной программой распространения программного обеспечения, которое используется для регистрации информации хранит пользователь для клиента Steam. Информация о регистрации пользователя хранится в файле с именем ClientRegistry.blob. Файлы BLOB данных обычно сохраняются с расширением БСП.
Создатель: | Valve |
Категория файла: | Файлы настроек |
Ключ реестра: | HKEY_CLASSES_ROOT\.blob |
Программные обеспечения, открывающие Valve Steam Archive:
Steam, разработчик — Valve
Совместимый с:
Windows |
Mac |
Linux |
Запись BLOB в таблицу
Чтобы вставить BLOB-данные в таблицу, используйте следующие шаги:
- Используйте функцию , чтобы прочитать файл. Функция возвращает указатель на файл.
- Подготовьте оператор к выполнению, вызвав метод объекта PDO. Метод возвращает экземпляр класса .
- Используйте метод объекта , чтобы связать параметр с именем переменной. Для данных BLOB вы привязываете параметр к указателю файла.
- Вызовите метод объекта оператора PDO.
Например, следующий метод класса вставляет новый документ в таблицу документов, используя описанные выше шаги:
<?php namespace App; /** * SQLite PHP Blob Demo */ class SQLiteBLOB { /** * PDO object * @var \PDO */ private $pdo; /** * Initialize the object with a specified PDO object * @param \PDO $pdo */ public function __construct($pdo) { $this->pdo = $pdo; } /** * Insert blob data into the documents table * @param type $pathToFile * @return type */ public function insertDoc($mimeType, $pathToFile) { if (!file_exists($pathToFile)) throw new \Exception("File %s not found."); $sql = "INSERT INTO documents(mime_type,doc) " . "VALUES(:mime_type,:doc)"; // read data from the file $fh = fopen($pathToFile, 'rb'); $stmt = $this->pdo->prepare($sql); $stmt->bindParam(':mime_type', $mimeType); $stmt->bindParam(':doc', $fh, \PDO::PARAM_LOB); $stmt->execute(); fclose($fh); return $this->pdo->lastInsertId(); } }
Следующий скрипт вставляет два документа: 1 файл PDF и 1 изображение из папки ресурсов в таблицу документов.
<?php require 'vendor/autoload.php'; use App\SQLiteConnection as SQLiteConnection; use App\SQLiteBLOB as SQLiteBlob; $sqlite = new SQLiteBlob((new SQLiteConnection)->connect()); // insert a PDF file into the documents table $pathToPDFFile = 'assets/sqlite-sample database-diagram.pdf'; $pdfId = $sqlite->insertDoc('application/pdf', $pathToPDFFile); // insert a PNG file into the documents table $pathToPNGFile = 'assets/sqlite-tutorial-logo.png'; $pngId = $sqlite->insertDoc('image/png', $pathToPNGFile);
Using the Code
Reading a File into a Byte Array
byte[] byteArray = null; using (FileStream fs = new FileStream (FileName, FileMode.Open, FileAccess.Read, FileShare.Read)) { byteArray = new byte; int iBytesRead = fs.Read(byteArray, , (int)fs.Length); }
Saving BLOB Data from a File to Oracle
For Oracle, you will have to download ODP.NET from Oracle. The following script will create a table that will hold the Blob data in Oracle.
CREATE TABLE BlobStore ( ID number, BLOBFILE BLOB, DESCRIPTION varchar2(100) );
Now, we would like to write Blob in Oracle using C#.
string sql = " INSERT INTO BlobStore(ID,BLOBFILE,DESCRIPTION) _ VALUES(:ID, :BLOBFILE, :DESCRIPTION) "; string strconn = ConfigurationManager.ConnectionStrings_ .ConnectionString; using (OracleConnection conn = new OracleConnection(strconn)) { conn.Open(); using (OracleCommand cmd = new OracleCommand(sql, conn)) { cmd.Parameters.Add("ID", OracleDbType.Int32, 1, ParameterDirection.Input); cmd.Parameters.Add("BLOBFILE", OracleDbType.Blob, byteArray , ParameterDirection.Input); cmd.Parameters.Add("DESCRIPTION", OracleDbType.Varchar2, "any thing here", ParameterDirection.Input); cmd.ExecuteNonQuery(); } }
In the next step, we would like to load data from Oracle to file.
string sql = " select * from BlobStore "; string strconn = ConfigurationManager.ConnectionStrings_ .ConnectionString; using (OracleConnection conn = new OracleConnection(strconn)) { conn.Open(); using (OracleCommand cmd = new OracleCommand(sql, conn)) { using (IDataReader dataReader = cmd.ExecuteReader()) { while (dataReader.Read()) { byte[] byteArray= (Byte[])dataReader; using (FileStream fs = new FileStream (strfn, FileMode.CreateNew, FileAccess.Write)) { fs.Write(byteArray, , byteArray.Length); } } } } }
Saving BLOB Data from a File to Microsoft SQL
Storing and retrieving Blob data in SQL Server is similar to Oracle. Here are code snippets that show saving and loading in SQL server. The following script will create a table that will hold the Blob data in SQL server.
CREATE TABLE TestTable ( ID int, BlobData varbinary(max), DESCRIPTION nvarchar(100) )
The following code shows how to Load from SQL Server to file.
using (SqlConnection connection = new SqlConnection("ConnectionString")) { connection.Open(); using (SqlCommand command = new SqlCommand("select BlobData from TestTable", connection)) { byte[] buffer = (byte[])command.ExecuteScalar(); using (FileStream fs = new FileStream (@"C:\test.pdf", FileMode.Create)) { fs.Write(buffer, , buffer.Length); } } }
The following code shows how to save from byte array to SQL Server.
using (SqlConnection connection = new SqlConnection("ConnectionString")) { connection.Open(); using(SqlCommand cmd = new SqlCommand("INSERT INTO TestTable_ (ID, BlobData, DESCRIPTION) VALUES (@ID, @BlobData, @DESCRIPTION)", conn)) { cmd.Parameters.Add("@ID", SqlDbType.int).Value = 1; cmd.Parameters.Add("@BlobData", SqlDbType.VarBinary).Value = ByteArray; cmd.Parameters.Add("@DESCRIPTION", SqlDbType.NVarchar).Value = _ "Any text Description"; cmd.ExecuteNonQuery(); } }
Числовые типы
Хранение целых чисел
- TINYINT(N) (синоним INTEGER, BOOL, BOOLEAN) — 8 бит;
- SMALLINT(N) — 16 бит;
- MEDIUMINT(N) — 24 бита;
- INT(N) — 32 бита;
- BIGINT(N) — 64 бита.
СУБД MySQL позволяет указывать для целых чисел «размер», например INT(11). Для большинства приложений это не имеет значения: диапазон возможных значений этим не ограничивается. Однако данный параметр говорит некоторым интерактивным инструментам MySQL, сколько позиций необходимо зарезервировать для вывода числа. С точки зрения хранения и вычисления INT(1) и INT(20) идентичны.
Целочисленный тип данных длиной N бит позволяет хранить значения от -2(N-1) до 2(N-1)-1.
Целые типы данных могут иметь необязательный атрибут UNSIGNED, запрещающий отрицательные значения и приблизительно вдвое увеличивающий верхний предел положительных значений. Например, тип TINYINT UNSIGNED позволяет хранить значения от 0 до 255, а не от -128 до 127.
Знаковые и беззнаковые типы требуют одинакового пространства и обладают одинаковой производительностью.
Необязательный атрибут ZEROFILL заполнит нулями свободные позиции слева. Например с TINYINT(3) ZEROFILL, величина 2 будет записана, как 002.
Тип данных | Бит | По умолчанию | UNSIGNED |
---|---|---|---|
TINYINT | 8 | -128 — 127 | 0 — 255 |
SMALLINT | 16 | -32768 — 32767 | 0 — 65535 |
MEDIUMINT | 24 | -8388608 — 8388607 | 0 — 16777215 |
INT | 32 | -2147483648 — 2147483647 | 0 — 4294967295 |
BIGINT | 64 | -9223372036854775808 — 9223372036854775807 | 0 — 18446744073709551615 |
Хранение дробных чисел
Все типы допускают приближенные математические вычисления с плавающей точкой, но в случае с FLOAT и DOUBLE операции выполняются быстрее, так как процессор выполняет их естественным для него образом.
- FLOAT(M,D) — число с плавающей точкой небольшой точности, задействует 4 байта.
- DOUBLE(M,D) (синонимы REAL, DOUBLE PRECISION) — число с плавающей точкой двойной точности. Задействует 8 байт, имеет большую точность и больший диапазон значений.
- DECIMAL(M,D) (синонимы DEC, NUMERIC, FIXED) — дробное число, хранящееся в виде строки, если десятичное значение равно 0, значение не будет иметь десятичной запятой или дробной части. Предназначен для хранения точных дробных чисел (можно хранить большие целые числа, не помещающиеся в типе BIGINT). Имеет смысл использовать только тогда, когда нужны точные результаты при вычислениях с дробными числами, — например, при хранении финансовых данных. Задействует больше пространства.
M — количество отводимых под число символов. D — количество символов дробной части.
Для типов с плавающей точкой можно указать максимально разрешенное количество цифр до и после десятичной запятой. В случае с DECIMAL это влияет на объем пространства, требуемого для хранения данных столбца. При указании точности, в некоторых случаях, MySQL незаметно для пользователя может выбирать другой тип данных или будет округлять значения при сохранении. Поэтому рекомендуют указывать желаемый тип, но не точность.
FLOAT и DOUBLE могут иметь параметр UNSIGNED, запрещающий отрицательные числа, но диапазон значений от этого не изменится.
Число типа DECIMAL в MySQL 5.0 и более новых версиях может содержать до 65 цифр. В более ранних версиях MySQL тип DECIMAL имел предел 254 цифры и хранил значения в виде неупакованных строк (один байт на цифру). Однако эти версии СУБД не умели использовать такие большие числа в вычислениях, поскольку тип DECIMAL был просто форматом хранения. При выполнении каких-либо операций значения DECIMAL преобразовывались в тип DOUBLE.
Как удалить кэш миниатюр?
Нередко файлы миниатюр “отъедают” слишком много места на телефоне: счет идет на гигабайты. Полезно, а порой и необходимо, очищать содержимое папки thumbnails. В этом случае вы ничего не теряете, необходимые файлы будут созданы заново по мере необходимости.
Очистить файлы миниатюр можно двумя способами.
Способ 1 (вручную):
- Установите на Андроид файловый менеджер
- Включите просмотр скрытых файлов на телефоне
- Перейдите в папку thumbnails
- Удалите ее содержимое, выделив все файлы
Способ 2 (автоматически):
- Скачайте и установите приложение CCleaner для Андроид
- Перейдите в раздел “Очистка кэша” и памяти и нажмите “Анализ”
- В результатах отметьте флажком “Кэш миниатюр” и нажмите “Очистить”
Резюме файла OBB
У нас есть один существующие программные обеспечения, связанные с файлами OBB (как правило это программное обеспечение от , известное как Google Play Console), и их можно отнести к категории основных типов файлов один. Традиционно эти файлы имеют формат Android Opaque Binary Blob File .
Расширение файла OBB указано преимущественно в категории Data Files.
Расширение файла OBB поддерживается Web. Данные типы файлов можно найти в основном на настольных компьютерах и некоторых мобильных устройствах.
Рейтинг популярности файлов OBB составляет «Низкий», что означает, что данные файлы встречаются редко.
Шаг 3 — Отображение информации о продуктах из базы данных MySQL
Мы разместили в базе данных информацию о продуктах и их ихображения. Теперь мы создадим еще один скрипт PHP, который будет запрашивать и выводить информацию о продуктах в таблице HTML в браузере.
Для создания файла введите следующее:
Затем введите в файл следующую информацию:
/var/www/html/display_products.php
Сохраните изменения в файле и закройте его.
Здесь мы опять использовали файл для подключения к базе данных. Затем мы подготовили и выполнили команду SQL, используя PDO для извлечения всех элементов из таблицы с помощью команды .
Затем мы создали таблицу HTML и заполнили ее данными о продуктах, используя выражение PHP . Строка отправляет запрос в базу данных и сохраняет результат в переменной как многомерный массив, который затем отображается как столбец таблицы HTML с использованием синтаксиса .
Изображения из столбца заключены в теги . Мы использовали атрибуты и для уменьшения ширины и высоты изображений, чтобы они поместились в столбце таблицы HTML.
Чтобы конвертировать данные, хранящиеся в объекте типа , обратно в изображения, мы использовали встроенную функцию PHP и следующий синтаксис :
В данном случае — это значение параметра (тип файла), а закодированная строка из столбца — это данные .
Выполните в браузере файл , введя следующий адрес:
Запустив в браузере файл , вы увидите таблицу HTML со списком продуктов и связанных с ними изображений.
Это подтверждает, что скрипт PHP для извлечения изображений из базы данных MySQL работает ожидаемым образом.
Image to blob
We can create a of an image, an image part, or even make a page screenshot. That’s handy to upload it somewhere.
Image operations are done via element:
- Draw an image (or its part) on canvas using canvas.drawImage.
- Call canvas method .toBlob(callback, format, quality) that creates a and runs with it when done.
In the example below, an image is just copied, but we could cut from it, or transform it on canvas prior to making a blob:
If we prefer instead of callbacks:
For screenshotting a page, we can use a library such as https://github.com/niklasvh/html2canvas. What it does is just walks the page and draws it on . Then we can get a of it the same way as above.
Как удалить кэш миниатюр?
Нередко файлы миниатюр “отъедают” слишком много места на телефоне: счет идет на гигабайты. Полезно, а порой и необходимо, очищать содержимое папки thumbnails. В этом случае вы ничего не теряете, необходимые файлы будут созданы заново по мере необходимости.
Очистить файлы миниатюр можно двумя способами.
Способ 1 (вручную):
- Установите на Андроид файловый менеджер
- Включите просмотр скрытых файлов на телефоне
- Перейдите в папку thumbnails
- Удалите ее содержимое, выделив все файлы
Способ 2 (автоматически):
- Скачайте и установите приложение CCleaner для Андроид
- Перейдите в раздел “Очистка кэша” и памяти и нажмите “Анализ”
- В результатах отметьте флажком “Кэш миниатюр” и нажмите “Очистить”
SQL Server Data Types
String data types:
Data type | Description | Max size | Storage |
---|---|---|---|
char(n) | Fixed width character string | 8,000 characters | Defined width |
varchar(n) | Variable width character string | 8,000 characters | 2 bytes + number of chars |
varchar(max) | Variable width character string | 1,073,741,824 characters | 2 bytes + number of chars |
text | Variable width character string | 2GB of text data | 4 bytes + number of chars |
nchar | Fixed width Unicode string | 4,000 characters | Defined width x 2 |
nvarchar | Variable width Unicode string | 4,000 characters | |
nvarchar(max) | Variable width Unicode string | 536,870,912 characters | |
ntext | Variable width Unicode string | 2GB of text data | |
binary(n) | Fixed width binary string | 8,000 bytes | |
varbinary | Variable width binary string | 8,000 bytes | |
varbinary(max) | Variable width binary string | 2GB | |
image | Variable width binary string | 2GB |
Numeric data types:
Data type | Description | Storage |
---|---|---|
bit | Integer that can be 0, 1, or NULL | |
tinyint | Allows whole numbers from 0 to 255 | 1 byte |
smallint | Allows whole numbers between -32,768 and 32,767 | 2 bytes |
int | Allows whole numbers between -2,147,483,648 and 2,147,483,647 | 4 bytes |
bigint | Allows whole numbers between -9,223,372,036,854,775,808 and 9,223,372,036,854,775,807 | 8 bytes |
decimal(p,s) | Fixed precision and scale numbers.
Allows numbers from -10^38 +1 to 10^38 –1. The p parameter indicates the maximum total number of digits that can be stored (both to the left and to the right of the decimal point). p must be a value from 1 to 38. Default is 18. The s parameter indicates the maximum number of digits stored to the right of the decimal point. s must be a value from 0 to p. Default value is 0 |
5-17 bytes |
numeric(p,s) | Fixed precision and scale numbers.
Allows numbers from -10^38 +1 to 10^38 –1. The p parameter indicates the maximum total number of digits that can be stored (both to the left and to the right of the decimal point). p must be a value from 1 to 38. Default is 18. The s parameter indicates the maximum number of digits stored to the right of the decimal point. s must be a value from 0 to p. Default value is 0 |
5-17 bytes |
smallmoney | Monetary data from -214,748.3648 to 214,748.3647 | 4 bytes |
money | Monetary data from -922,337,203,685,477.5808 to 922,337,203,685,477.5807 | 8 bytes |
float(n) | Floating precision number data from -1.79E + 308 to 1.79E + 308.
The n parameter indicates whether the field should hold 4 or 8 bytes. float(24) holds a 4-byte field and float(53) holds an 8-byte field. Default value of n is 53. |
4 or 8 bytes |
real | Floating precision number data from -3.40E + 38 to 3.40E + 38 | 4 bytes |
Date and Time data types:
Data type | Description | Storage |
---|---|---|
datetime | From January 1, 1753 to December 31, 9999 with an accuracy of 3.33 milliseconds | 8 bytes |
datetime2 | From January 1, 0001 to December 31, 9999 with an accuracy of 100 nanoseconds | 6-8 bytes |
smalldatetime | From January 1, 1900 to June 6, 2079 with an accuracy of 1 minute | 4 bytes |
date | Store a date only. From January 1, 0001 to December 31, 9999 | 3 bytes |
time | Store a time only to an accuracy of 100 nanoseconds | 3-5 bytes |
datetimeoffset | The same as datetime2 with the addition of a time zone offset | 8-10 bytes |
timestamp | Stores a unique number that gets updated every time a row gets created or modified. The timestamp value is based upon an internal clock and does not correspond to real time. Each table may have only one timestamp variable |
Other data types:
Data type | Description |
---|---|
sql_variant | Stores up to 8,000 bytes of data of various data types, except text, ntext, and timestamp |
uniqueidentifier | Stores a globally unique identifier (GUID) |
xml | Stores XML formatted data. Maximum 2GB |
cursor | Stores a reference to a cursor used for database operations |
table | Stores a result-set for later processing |
Microsoft Access Data Types
Data type | Description | Storage |
---|---|---|
Text | Use for text or combinations of text and numbers. 255 characters maximum | |
Memo | Memo is used for larger amounts of text. Stores up to 65,536 characters. Note: You cannot sort a memo field. However, they are searchable | |
Byte | Allows whole numbers from 0 to 255 | 1 byte |
Integer | Allows whole numbers between -32,768 and 32,767 | 2 bytes |
Long | Allows whole numbers between -2,147,483,648 and 2,147,483,647 | 4 bytes |
Single | Single precision floating-point. Will handle most decimals | 4 bytes |
Double | Double precision floating-point. Will handle most decimals | 8 bytes |
Currency | Use for currency. Holds up to 15 digits of whole dollars, plus 4 decimal places. Tip: You can choose which country’s currency to use | 8 bytes |
AutoNumber | AutoNumber fields automatically give each record its own number, usually starting at 1 | 4 bytes |
Date/Time | Use for dates and times | 8 bytes |
Yes/No | A logical field can be displayed as Yes/No, True/False, or On/Off. In code, use the constants True and False (equivalent to -1 and 0). Note: Null values are not allowed in Yes/No fields | 1 bit |
Ole Object | Can store pictures, audio, video, or other BLOBs (Binary Large OBjects) | up to 1GB |
Hyperlink | Contain links to other files, including web pages | |
Lookup Wizard | Let you type a list of options, which can then be chosen from a drop-down list | 4 bytes |
❮ Previous
Next ❯
micro_thumbnail_blob.0 и подобные — что это за файлы?
Анализируя интернет — получил две версии:
- Являются кэшем синхронизации с аккаунтом MIUI (например от Mi Cloud Photos). Данные файлы — фото, видео, эскизы, корзина (удаленные).
- Возможно используются для предосмотра миниатюр. Являются кэшем галереи MIUI.
К системе Android соответственно отношения не имеют. Поэтому можно удалить, однако лучше сперва сделать бэкап. Можно попробовать не удалять, а переименовать, например micro_thumbnail_blob.0 переименовать в micro_thumbnail_blob.0_off, после чего проанализировать работу Android. Отсутствие глюков, лагов в течении некоторого времени (например дня) — значит можно удалить.
Могут находиться в папке: