gpt4 book ai didi

mysql_fetch_fields 返回的长度与预期不同

转载 作者:行者123 更新时间:2023-11-29 13:56:34 24 4
gpt4 key购买 nike

我需要根据选择的结果类型在其他数据库中创建表。查询结果可以映射到表中的实际列,也可以不映射到表中的实际列。 从 char_length_test 中选择 1, c

如何使用 mysql C api 在 select 语句后获取实际列大小?

我创建了这样的表:

CREATE TABLE char_length_test (c char(22))

并使用mysql_real_query执行此查询

SELECT c from char_length_test

之后我执行mysql_fetch_fields来获取c字段的长度,并期望它是22,如create table语句中所示。不幸的是,长度包含值 66(比我预期多 3 倍)。尝试了不同的尺寸,但结果是一样的,长度总是大 3 倍。

还使用gdb查看是否有其他数据字段包含期望值:

{
name = "c",
org_name = "c",
table = "char_length_test",
org_table = "char_length_test",
db = "database",
catalog = "def",
def = 0x0,
length = 66,
max_length = 0,
name_length = 1,
org_name_length = 1,
table_length = 16,
org_table_length = 16,
db_length = 6,
catalog_length = 3,
def_length = 0,
flags = 0,
decimals = 0,
charsetnr = 33,
type = MYSQL_TYPE_STRING,
extension = 0x0
}

最佳答案

mysql_fetch_fields() 和 mysql_field_len() 将返回存储 VARCHAR 值所需的字节数,而不是字符数。对于 UTF-8 列,这将返回实际列大小的 3 倍,即使文档另有说明。这样您的 C 代码就会知道要分配多少内存。如果您将 MySQL 连接(而不是表结构!)设置为不同的字符集,您将得到不同的结果。

编辑:

您可以通过调用mysql_set_character_set()来更改MySQL连接的字符集。 。如果您使用 8 位字符集,您应该获得与数据库列的宽度匹配的字节数,例如:

mysql_set_character_set(&mysql,'latin1');

关于mysql_fetch_fields 返回的长度与预期不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15764359/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com