一个c语言的数据库问题

lgxtju
倔强 2011-01-18 字数 72

如何将一块中间带有十六进制的0的内存插入数据表中的char字段里,而不被0截断

17 个回复
lgxtju
倔强 2011-01-18

在线等,多谢大拿们

【 在 lgxtju (倔强) 的大作中提到: 】

: 如何将一块中间带有十六进制的0的内存插入数据表中的char字段里,而不被0截断

abenbit
More than programming 2011-01-18

你不用string系列就没问题吧

【 在 lgxtju (倔强) 的大作中提到: 】

: 如何将一块中间带有十六进制的0的内存插入数据表中的char字段里,而不被0截断

jpXi
** 2011-01-18

这种问题我一般先自己做个序列化与反序列化,存数据库就存序列化后的字符串。

【 在 lgxtju (倔强) 的大作中提到: 】

: 如何将一块中间带有十六进制的0的内存插入数据表中的char字段里,而不被0截断

lgxtju
倔强 2011-01-18

我用char型数组也不行。    若问一下,您所说的string系列包括哪些?

【 在 abenbit (More than programming) 的大作中提到: 】

: 你不用string系列就没问题吧

wxstorm
企鹅 2011-01-18

数组库那边用binary类型

这个有可能在程序和数据库两边都有可能被截断了

【 在 lgxtju (倔强) 的大作中提到: 】

: 我用char型数组也不行。    若问一下,您所说的string系列包括哪些?

abenbit
More than programming 2011-01-18

string.h里面那些呗

strtok, substr,strcmp之类的

【 在 lgxtju (倔强) 的大作中提到: 】

: 我用char型数组也不行。    若问一下,您所说的string系列包括哪些?

lgxtju
倔强 2011-01-18

非常感谢,也想过这种方法,将这块内存序列化为十六进制的串

【 在 jpXi (近平·习) 的大作中提到: 】

: 这种问题我一般先自己做个序列化与反序列化,存数据库就存序列化后的字符串。

lgxtju
倔强 2011-01-18

但是,我觉得这种方法有点麻烦,不知道有没有更好的方法。

【 在 lgxtju (倔强) 的大作中提到: 】

: 非常感谢,也想过这种方法,将这块内存序列化为十六进制的串

lgxtju
倔强 2011-01-18

我就不明白,数据库中的char字段是可以被插入中间带0的串的。难道在c语言中就解决不了?

【 在 lgxtju (倔强) 的大作中提到: 】

: 但是,我觉得这种方法有点麻烦,不知道有没有更好的方法。

slowaction
slowaction 2011-01-18

首先你要确定你的数据库char字段的0是字符还是0x00

其次看你用了什么写入接口

【 在 lgxtju (倔强) 的大作中提到: 】

: 我就不明白,数据库中的char字段是可以被插入中间带0的串的。难道在c语言中就解决不了?

lgxtju
倔强 2011-01-18

0x00.在数据库中的char字段里可以插入中间带0x00的字符串,而不会被截断。但在c语言中,不知道如何实现

【 在 slowaction (slowaction) 的大作中提到: 】

: 首先你要确定你的数据库char字段的0是字符还是0x00

: 其次看你用了什么写入接口

slowaction
slowaction 2011-01-18

那看你用了什么接口写入的

【 在 lgxtju (倔强) 的大作中提到: 】

: 0x00.在数据库中的char字段里可以插入中间带0x00的字符串,而不会被截断。但在c语言中,不知道如何实现

lgxtju
倔强 2011-01-18

愿闻其详。大师。我的需求在原文中有?

【 在 slowaction (slowaction) 的大作中提到: 】

: 那看你用了什么接口写入的

slowaction
slowaction 2011-01-18

int sqlite3_bind_blob(sqlite3_stmt*, int, const void*, int n, void(*)(void*));

int sqlite3_bind_text(sqlite3_stmt*, int, const char*, int n, void(*)(void*));

比如这两个写入接口,非常可能一个能写0x00,一个不能

【 在 lgxtju (倔强) 的大作中提到: 】

: 愿闻其详。大师。我的需求在原文中有?

wxstorm
企鹅 2011-01-18

他这种需求就该用blob这种binary的数据库类型

用char不杯具才怪

如果建索引之类的更麻烦

【 在 slowaction (slowaction) 的大作中提到: 】

: int sqlite3_bind_blob(sqlite3_stmt*, int, const void*, int n, void(*)(void*));

: int sqlite3_bind_text(sqlite3_stmt*, int, const char*, int n, void(*)(void*));

: 比如这两个写入接口,非常可能一个能写0x00,一个不能

: ...................

lgxtju
倔强 2011-01-18

我们使用db2,嵌入sql

【 在 slowaction (slowaction) 的大作中提到: 】

: int sqlite3_bind_blob(sqlite3_stmt*, int, const void*, int n, void(*)(void*));

: int sqlite3_bind_text(sqlite3_stmt*, int, const char*, int n, void(*)(void*));

: 比如这两个写入接口,非常可能一个能写0x00,一个不能

lgxtju
倔强 2011-01-18

blob我性能有问题吧?

【 在 wxstorm (企鹅) 的大作中提到: 】

: 他这种需求就该用blob这种binary的数据库类型

: 用char不杯具才怪

: 如果建索引之类的更麻烦