Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   MySQL HELP! Запись 0x00 байта (https://forum.antichat.xyz/showthread.php?t=101713)

Smapt 17.01.2009 17:35

MySQL HELP! Запись 0x00 байта
 
Записываю в MySQL базу из Си строку, запись идет до первого 0x00 байта, а дальше пустота... Можно-ли с этим боротся?

criz 17.01.2009 17:52

Цитата:

Сообщение от Smapt
Записываю...

как?

Joker-jar 17.01.2009 17:55

0x00 - это ж конец строки

Smapt 17.01.2009 18:12

Цитата:

Сообщение от criz
как?

Примерно так:
Код:

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);
        }
}



Цитата:

Сообщение от Joker-jar
0x00 - это ж конец строки

Спасибо, я знаю.

criz 17.01.2009 18:28

Может у тебя конфликт типов данных? Т.е. ты передаешь hex-данные в текстовое поле...

Smapt 17.01.2009 18:33

Передавать пробовал по все что только можно, char, blob и т.д. Результат всегда одинаковый записывает до 0x00 и обрезает строку. Если не ошибаюсь раньше в MySQL был тип данных binary , так вот в строку типа binary(100) данные записывались нормально(т.е. вместе с 0x00), а сечас bin почему-то убрали

oRb 17.01.2009 18:35

нуль байт запиши как char(0)
те запрос будет вида:
UPDATE `user` SET text=CONCAT('abc',char(0),'abc') WHERE name='name'

И поле text, наверно, должно иметь тип blob.

Joker-jar 17.01.2009 18:44

Цитата:

Спасибо, я знаю.
В таком случае, ты спрашиваешь примерно следующее: как записать конец строки в середину строки. Используй, к примеру, blob

Smapt 17.01.2009 20:40

Всем спс, строка обрезалась ещё до отправки...
хм... возникает новый вопрос нельзяли без особого изврата отучить sprintf от "обрезания" ??

criz 17.01.2009 22:20

Цитата:

Сообщение от Smapt
хм... возникает новый вопрос нельзяли без особого изврата отучить sprintf от "обрезания" ??

А обязательно sprintf() юзать? Можно заменить strcat() :)


Время: 06:04