mysqli_result::fetch_field()
返回一个 type
属性,它是一个整数值。
varchar和varbinary的整数值相同( 0xFD
)列,也用于char和binary( 0xFE
)列。这些列类型可以通过 MYSQLI_TYPE_STRING
以及 MYSQLI_TYPE_VAR_STRING
常量。
要知道字符串列是否是二进制的(它们有一个名为 binary
),或者要知道列是否需要转换为另一个字符集,确实需要字符集名称。
但是。。。 mysqli_result::fetch_field()
有一个 charsetnr
属性,该属性再次返回字符集的整数。只是这一次似乎没有办法知道字符集的名称,更不用说排序了?
那么如何才能从 mysqli_result
?
3条答案
按热度按时间lvmkulzt1#
您不需要知道字符集就可以查看字段是否是二进制的。
考虑这个例子:
您有$field->flags属性。检查其位128(0x80)。如果设置了位,则字段为二进制(binary,varbinary)并具有“binary”排序规则。
我不确定您是否可以在非二进制字段上设置“二进制”排序规则。
oxosxuxt2#
热释光;博士
charsetnr
所列排序规则的idSHOW COLLATION
.我忍不住注意到,即使是数字列
charsetnr
已设置为63
. 这把我引向手册,上面写着:要区分字符串数据类型的二进制和非二进制数据,请检查charsetnr值是否为63。如果是这样,字符集是二进制的,表示二进制数据而不是非二进制数据。这使您能够区分binary和char、varbinary和varchar,以及blob类型和文本类型。
通过以下方式检索有关排序规则和字符集的详细信息:
k4emjkb13#
将在特定数据库(架构)中查找与特定表关联的排序规则。