Записываю в MySQL базу из Си строку, запись идет до первого 0x00 байта, а дальше пустота... Можно-ли с этим боротся?
Примерно так: Code: char text[] = {0x10,0x011,0x12,0x00,0x10,0x11}; MYSQL_RES * UPDATE = QUERY("base","UPDATE `user` SET text='%s' WHERE name='name'",text); MYSQL_RES * QUERY(char * base, char * Format, ...) { va_list ap; // For arguments va_start( ap, Format ); int buff_size = _vscprintf(Format,ap)+1; char * buff = new char[buff_size]; vsprintf(buff,Format,ap); char * queryPtr = new char[1024]; mysql_select_db(mysql,base); sprintf(queryPtr,"use %s",base); mysql_query(mysql,queryPtr); sprintf(queryPtr, buff); if (mysql_query(mysql,queryPtr)) { va_end ( ap ); delete[] buff; delete[] queryPtr; return 0; } else { va_end ( ap ); delete[] buff; delete[] queryPtr; return mysql_store_result(mysql); } } Спасибо, я знаю.
Передавать пробовал по все что только можно, char, blob и т.д. Результат всегда одинаковый записывает до 0x00 и обрезает строку. Если не ошибаюсь раньше в MySQL был тип данных binary , так вот в строку типа binary(100) данные записывались нормально(т.е. вместе с 0x00), а сечас bin почему-то убрали
нуль байт запиши как char(0) те запрос будет вида: UPDATE `user` SET text=CONCAT('abc',char(0),'abc') WHERE name='name' И поле text, наверно, должно иметь тип blob.
В таком случае, ты спрашиваешь примерно следующее: как записать конец строки в середину строки. Используй, к примеру, blob
Всем спс, строка обрезалась ещё до отправки... хм... возникает новый вопрос нельзяли без особого изврата отучить sprintf от "обрезания" ??