You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust中如何将mysql::value::Value转换为f64、i32等其他数据类型

解决方案

方法1:使用Row内置的get方法(最推荐)

你使用的Rust MySQL库的Row类型自带类型转换能力,不需要手动处理Bytes类型,直接通过get方法指定目标类型即可:

conn.query_iter("select * from TheForm")
    .unwrap()
    .for_each(|row_result| {
        let row = row_result.unwrap().unwrap();
        // 按索引取字段,直接指定要转换的目标类型
        let id: u64 = row.get(0).unwrap();
        let value1: f64 = row.get(1).unwrap();
        let value2: f64 = row.get(2).unwrap();
        let str_value: String = row.get(3).unwrap();

        println!("id: {}, value1: {}, str_value: {}", id, value1, str_value);
    });

你也可以按字段名取,避免索引顺序记错的问题:

let id: u64 = row.get("id").unwrap();

方法2:手动转换Bytes类型

如果你确实拿到了Bytes实例需要自行转换,可按以下方式处理:
Bytes类型实现了AsRef<[u8]> trait,可以先拿到字节切片再转目标类型:

  • 转String:
let bytes = row.get::<mysql::Bytes, _>(0).unwrap();
let str_val = String::from_utf8(bytes.as_ref().to_vec()).unwrap();
// 如果允许非UTF8字符,可用损失转换:
let str_val_lossy = String::from_utf8_lossy(bytes.as_ref()).to_string();
  • 转f64:
let bytes = row.get::<mysql::Bytes, _>(1).unwrap();
let float_val: f64 = String::from_utf8_lossy(bytes.as_ref()).parse().unwrap();

进阶用法:直接映射为结构体

开启MySQL库的derive功能后,可以通过派生宏直接把整行数据映射为结构体实例,代码更易维护:

  1. 首先修改Cargo.toml依赖开启feature:
mysql = { version = "24.0", features = ["derive"] }
  1. 定义对应表结构的结构体:
use mysql::prelude::FromRow;

#[derive(Debug, FromRow)]
struct TheForm {
    id: u64,
    value1: f64,
    value2: f64,
    value3: f64,
    value4: f64,
    value5: f64,
}
  1. 遍历直接转换:
conn.query_iter("select * from TheForm")
    .unwrap()
    .for_each(|row_result| {
        let row = row_result.unwrap().unwrap();
        let form_data = TheForm::from_row(row);
        println!("{:?}", form_data);
    });

注意事项

  • 目标类型要和数据库字段类型兼容,否则转换会失败,实际项目不要直接用unwrap,需做好错误处理。
  • 如果数据库字段允许为NULL,要把目标类型设置为Option<T>,比如let value: Option<f64> = row.get(1).unwrap();。

内容的提问来源于stack exchange,提问作者Lee Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 16:45:02