Windows-MySQL的UDF教程,以获取字符的Unicode码点为例

MySQL-UDF说明

在MySQL中,用户定义函数(User-Defined Functions,UDF)是用户编写的、能够扩展MySQL功能的自定义函数。这些函数可以用于SQL语句,就像MySQL内置的函数一样。UDFs可以用于执行各种任务,从简单的计算到复杂的数据处理,甚至可以与外部库进行交互。

UDF这个术语有歧义,不仅仅可以指使用DLL加载的自定义函数,也可以指使用SQL编写的自定义函数。因此,MySQL官方将UDF修改成了Loadable functions。本教程为了讨论方便,继续沿用UDF术语,本教程的UDF等同于Loadable functions

教程说明

本教程提供了一个UDF(User-Defined Function)示例,旨在引导用户在Windows环境下创建和使用MySQL-UDF。该示例演示了如何以UDF的形式获取字符的Unicode码点。

该示例将创建一个MySQL函数,函数名为udf_example。该函数的传入参数只有1个,参数的数据类型是String,返回该参数的第一个字符的unicode码点。比如,使用SQL语句SELECT udf_example("中国");调用该函数时,会返回字符"中"的Unicode码点20013。

本教程的MySQL版本信息为:mysql Ver 8.0.31 for Win64 on x86_64 (MySQL Community Server - GPL)。本教程将使用Visual Studio 2019生成用于UDF的DLL。

具体步骤

本教程大体分为3步

  1. 生成用于UDF的DLL
  2. 加载UDF到MySQL
  3. 使用UDF

生成用于UDF的DLL

新建MySQL_UDF工程

在Visual Studio 2019中创建动态链接库(DLL)工程,工程名为MySQL_UDF

。创建完成之后工程目录如下所示:

| 头文件
	|-- framework.h
	|-- pch.h
| 源文件
	|-- dllmain.cpp
	|-- pch.cpp

配置MySQL_UDF工程

本地Windows调试器左边的解决方案配置/解决方案平台改为Debug/x64

右键MySQL_UDF工程,点击属性,在属性页进行如下配置:

  1. 配置改为Debug平台改为x64
  2. 添加MySQL相关的包含目录。
    • 进入:配置属性 => C/C++ => 常规 => 附加包含目录
    • 添加目录:C:\Program Files\MySQL\MySQL Server 8.0\include

添加源代码

头文件下新建mysql_udf.h文件,并添加如下代码:

#pragma once
#pragma warning(disable: 4996)

#define UDF_DLL __declspec(dllexport) 
#include "mysql.h"  
#include "mysql/udf_registration_types.h"
#include <codecvt>
#include <wchar.h>


extern "C" {
	UDF_DLL bool udf_example_init(UDF_INIT* initid, UDF_ARGS* args, char* message);
	UDF_DLL long long udf_example(UDF_INIT* initid, UDF_ARGS* args, char* is_null, char* error);
	UDF_DLL void udf_example_deinit(UDF_INIT*);
}

源文件dllmain.cpp文件中添加如下代码

#include "mysql_udf.h"

bool udf_example_init(UDF_INIT * initid, UDF_ARGS * args, char* message) {
    if (args->arg_count != 1 || args->arg_type[0] != STRING_RESULT) {
        //strcpy(message, "this function only takes 1 parameter, its type is STRING");
        strcpy(message, u8"这个函数只支持一个参数,参数类型是STRING!");
        return true;
    }
    return false;
}

long long udf_example(UDF_INIT* initid, UDF_ARGS* args,
    char* is_null, char* error) {
    // 解析参数
    char* utf8_str = args->args[0];
    std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
    std::wstring wide_str = converter.from_bytes(utf8_str);
    return (long long)wide_str[0];
}

void udf_example_deinit(UDF_INIT*) {}

关于xxx()xxx_init()xxx_deinit()的作用与相互关系,详见https://dev.mysql.com/doc/extending-mysql/8.0/en/adding-loadable-function.html#loadable-function-interface-functions

生成MySQL_UDF.dll文件

右键MySQL_UDF工程,点击生成

DLL生成完成,即可在$(SolutionDir)\x64\Debug\路径下找到MySQL_UDF.dll

加载 UDF 到 MySQL

  1. MySQL_UDF.dll复制到C:\Program Files\MySQL\MySQL Server 8.0\lib\plugin
  2. 执行SQL语句CREATE FUNCTION udf_example RETURNS INTEGER SONAME 'MySQL_UDF.dll';
  • 不需要使用udf_example函数后,可以用SQL语句DROP FUNCTION udf_example;删除udf_example函数

使用UDF

执行SQL语句SELECT udf_example("中国");

参考文档

MySQL-UDF官方文档 https://dev.mysql.com/doc/extending-mysql/8.0/en/adding-loadable-function.html

MySQL-UDF官方示例 https://github.com/mysql/mysql-server/blob/trunk/sql/udf_example.cc

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
mysql-udf-http是MySQL的一个插件,它允许用户通过HTTP协议与远程服务器进行通信。在Windows环境下,安装和配置mysql-udf-http可以按照以下步骤进行。 首先,下载mysql-udf-http插件的二进制文件和依赖库,并将它们放置在MySQL的安装目录下的插件文件夹中。 然后,在MySQL配置文件my.ini中添加以下内容: ```shell [mysqld] # 加载mysql-udf-http插件 plugin-load=add_udf.dll # 定义插件库的路径 plugin_dir="C:/path/to/plugin_folder" # 定义存储HTTP请求回复的表 set-variable=udf_http_table=http_responses ``` 需要将“C:/path/to/plugin_folder”替换为实际的插件文件夹路径。 接下来,使用管理员权限打开命令提示符,切换到MySQL的bin目录,并登录MySQL服务器: ```shell cd C:\path\to\mysql\bin mysql -u root -p ``` 输入管理员密码后,创建存储HTTP请求回复的表: ```shell CREATE TABLE http_responses ( id INT NOT NULL AUTO_INCREMENT, url VARCHAR(255) NOT NULL, response TEXT NOT NULL, PRIMARY KEY (id) ); ``` 然后,加载mysql-udf-http插件: ```shell CREATE FUNCTION http_get RETURNS STRING SONAME 'udf_http.dll'; CREATE FUNCTION http_post RETURNS STRING SONAME 'udf_http.dll'; ``` 现在,可以使用http_get和http_post函数来发送HTTP GET和POST请求,并得到响应: ```shell SELECT http_get('http://api.example.com/data'); SELECT http_post('http://api.example.com/data', 'param1=value1&param2=value2'); ``` 发送请求后,HTTP响应将会被保存在之前创建的http_responses表中。 总之,通过按照上述步骤安装和配置mysql-udf-http插件,可以在Windows环境下实现通过MySQL发送HTTP请求并获取响应的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值