Задавайте вопросы, мы ответим
Вы не зашли.
Добрый день всем!
Есть несколько бинарных файлов, содержащих структурированные записи разных типов длиной до 4 к. Эти файлы содержат некоторую общую информацию для всех типов записей и специфическую информацию не только для файлов разного типа, но и для разных записей в рамках одного типа.
база данных принимает вид:
field1(INTEGER) field2(VARCHAR(10)) .... fieldN(BOOL) source(BLOB)
Записей достаточно много. В разных файлах по разному, но бывает более полутора миллионов на файл.
Файлы появляются асинхронно.
Возникает вопрос с автоматической массовой загрузкой записей в базу
вот пример загрузки из файла
mysql> LOAD DATA INFILE 'C:/Documents and Settings/Administrator/Desktop/employee.txt'
-> INTO TABLE LoadedEmployee
-> FIELDS TERMINATED BY '\t'
-> LINES TERMINATED BY '\n';
а как это выполнить из shell ?
а вот пример загрузки BLOB http://sqlinfo.ru/forum/viewtopic.php?id=1707
INSERT INTO имя_таблицы (имя_колонки) VALUES("бинарный_код_вашего_изображения");
....
Если у Вас хорошая операционная система, можете открыть изображение в текстовом редакторе, добавить в нем символы обратной косой черты перед каждым из символов ' , " , \0, и получившийся текст использовать в качестве бинарного кода изображения. Виндоус в этом смысле не является хорошей операционной системой, т.к. добавляет после каждого \r символ \n, чем портит изображения.
Есть, однако, смысл воспользоваться (или написать) каким-то приложением, которое сформирует и выполнит запрос за Вас (так, чтобы не мучать текстовый редактор и нервную систему)
действительно ли только для символов ',",\0 поставить "косую черту" какую? (\) а для самой черты как быть? (\\)
Вопрос сводится к тому как записать ("бинарный_код_вашего_изображения") в текстовый файл, который можно загрузить командой LOAD DATA ?
С уважением, Павел.
Неактивен
1. Из shell — смотрите на команду mysqlimport.
2. Запись файлика на диск — зависит от приложения. Если у Вас PHP, то оно по умолчанию записывает файлики на диск (кажется, за список файлов отвечает $_FILES[]).
Неактивен
спасибо за mysqlimport
нет у меня не PHP у меня C++
вопрос не буквально "как записать в файл", а как отобразить бинарное поле в тестовом файле
вот бинарное содержимое(нех): 30 31 32 33 34 35 00 01 02 03 04 05 .....
как будет это выглядеть в текстовом файле ("012345\0\1\2\3\4\5 ??? или ...
30 - это ascii код символа "0" с ним все просто, а как быть с управляющими символами?
Неактивен
наверное это невозможно, так как:
Некоторые случаи, не поддерживаемые оператором LOAD DATA INFILE:
Строки с фиксированным размером (обе опции FIELDS TERMINATED BY и FIELDS ENCLOSED BY пустые) и столбцы типа BLOB или TEXT.
Неактивен
Отобразить бинарное содержимое 30 31 32 я предлагаю так: 30 31 32. Не надо ничего
выдумывать, просто запишите картинку в файл. Перед символами, которые в LOAD
DATA INFILE имеют особый смысл, следует поставить обратную косую черту.
Некоторые случаи, не поддерживаемые оператором LOAD DATA INFILE:
Строки с фиксированным размером (обе опции FIELDS TERMINATED BY и FIELDS ENCLOSED BY пустые) и столбцы типа BLOB или TEXT.
Где Вы нашли эту чушь? Только что проимпортировал колонку BLOB без каких-либо проблем.
--
А вообще, было бы куда проще записать всё в MySQL прямо из C++.
Неактивен
т.е. Вы хотите сказать что если я из С++ буду командой INSERT вставлять полтора миллиона записей это будет быстрее чем LOAD DATA INFILE ?
Только что проимпортировал колонку BLOB без каких-либо проблем.
а Вы не могли бы мне на почту прислать сам файл, который импортировался.
Неактивен
успешный массовый импорт полей BLOB:
# mysql -e 'CREATE TABLE testblob(id INT, B BLOB)' test
# mysqlimport --local test testblob.txt
test.testblob: Records: 32 Deleted: 0 Skipped: 0 Warnings: 0
файл для загрузки в "прицепе" : testblob.txt
бинарные коды, которые закрывались '\' :
0(просто ноль)
9(табуляция) - по умолчанию разделитель полей (если поля делятся как-то подругому - то нужно этот символ закрывать '\')
10(конец строки) - по умолчанию разделитель строк (см выше)
13(возврат корретки)
26(конец файла)
34(двойной апостроф)
39(одиночный апостроф)
92(\)
selblob - программа, которая делает select * from testblob и формирует вывод поля BLOB в нех
#./selblob
ID BLOB
100 00 01 02 03 04 05 06 07
101 08 09 0A 0B 0C 0D 0E 0F
102 10 11 12 13 14 15 16 17
103 18 19 1A 1B 1C 1D 1E 1F
104 20 21 22 23 24 25 26 27
105 28 29 2A 2B 2C 2D 2E 2F
106 30 31 32 33 34 35 36 37
107 38 39 3A 3B 3C 3D 3E 3F
108 40 41 42 43 44 45 46 47
109 48 49 4A 4B 4C 4D 4E 4F
110 50 51 52 53 54 55 56 57
111 58 59 5A 5B 5C 5D 5E 5F
112 60 61 62 63 64 65 66 67
113 68 69 6A 6B 6C 6D 6E 6F
114 70 71 72 73 74 75 76 77
115 78 79 7A 7B 7C 7D 7E 7F
116 80 81 82 83 84 85 86 87
117 88 89 8A 8B 8C 8D 8E 8F
118 90 91 92 93 94 95 96 97
119 98 99 9A 9B 9C 9D 9E 9F
120 A0 A1 A2 A3 A4 A5 A6 A7
121 A8 A9 AA AB AC AD AE AF
122 B0 B1 B2 B3 B4 B5 B6 B7
123 B8 B9 BA BB BC BD BE BF
124 C0 C1 C2 C3 C4 C5 C6 C7
125 C8 C9 CA CB CC CD CE CF
126 D0 D1 D2 D3 D4 D5 D6 D7
127 D8 D9 DA DB DC DD DE DF
128 E0 E1 E2 E3 E4 E5 E6 E7
129 E8 E9 EA EB EC ED EE EF
130 F0 F1 F2 F3 F4 F5 F6 F7
131 F8 F9 FA FB FC FD FE FF
Неактивен
Ну то есть Вам удалось импортировать блобы, я правильно понимаю?
Неактивен
Да удалось!
Неактивен