当前位置: 首页 > 图文教程 > 数据库 > MYSQL > 在Windows上的MySQL UDF开发应用

MYSQL
Windows 2003搭建Apache PHP MySQL环境经验分享
PHP环境配置IIS5.0+PHP5.23+MYSQL5+phpMyAdmin
详解用phpmyadmin建立MYSQL数据库的过程
几条常见的数据库分页 SQL 语句
将MySQL数据导入到Sql Server中
解决MySQL数据库中文模糊检索问题
MySQL索引分析和优化
提高MySQL查询效率的三个有效的尝试
MySQL查询不含周末的五天前的日期
连接MySQL数据库失败频繁的原因分析
SQL Server和MySQL的安全性分析
Linux搭建Discuz论坛的方法
如何保护MySQL中的重要数据
怎样把你的 MySQL 完全中文化
FreeBSD 6.2快速架设网站服务器教程
Oracle限制返回结果集的大小
MySQL中与浮点比较有关问题的解决
distinct在mysql中查询多条不重复记录值的解决办法
全面提升Linux服务器的安全
不能通过mysql.sock连接MySQL问题的方法

MYSQL 中的 在Windows上的MySQL UDF开发应用


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-17   浏览: 103 ::
收藏到网摘: n/a

曾以为Windows版本的MySQL存在不能使用UDF的BUG诸提交了一个bug报告。不过似乎发现是我搞错了,MySQL的技术支持人员给了非常完美的解答,同大家分享一下。下边是原文回复。
  
用户你好。抱歉,这并不是一个bug。下面我粘贴一个以前为某个客户做的简例,假设你有了VC++,源码分发,并且有一个正常运行的MySQL服务器。
  

我将创建一个UDF它将一个名字:
  
注意:例子非常简陋,目的是让你了解该如何处理手头的UDF。
  
- 打开 mysqld.dsw 工作区。
  
- 添加新项目到这个工作区
  
- Project name: my_udf // 项目名称:my_udf
  
- 选择 Win32 Dynamic-Link Library // Win32动态连接库
  
- 点击 OK
  
- 选择 An Empty DLL project // 一个空DLL项目
  
- 点击 Finish
  
- 点击 OK
  
- 添加新文件 my_udf.cpp 到项目中:
  
以下为引用的内容:

  #include
  
  #include
  
  #include
  
  extern "C" {
  
  char *my_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null,
  
  char *error);
  
  // 兼容C
  
  }
  
  char *my_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null,
  
  char *error)
  
  {
  
  char * me = "my name";
  
  return me;
  
  // 调用此UDF将返回 my name
  
  }
  
  - 按 Ctrl+N 来创建一个新文件。
  
  - 选择 text 类型
  
  - File name: my_udf.def file://文件名:my_udf.def
  
  - 按照下边的内容编辑文件。
  
  LIBRARY UDF_EXAMPLE
  
  DESCRIPTION 'Example Using UDF with VC++'
  
  VERSION 1.0
  
  EXPORTS
  
  my_name
  
  - 右击my_udf项目并选择Settings
  
  - 点 C/C++ 选项卡
  
  - 选择 General
  
  - 添加宏 HAVE_DLOPE 到预处理器定义
  
  - 选择 Preprocessor
  
  - 添加头文件路径: Additional Include directories
  
  例如: ../include
  
  - 按 F7 去编译成 DLL.
  
  - 复制 my_udf.dll 到环境变量path定义过的目录
  
  比如 \winnt\system32 。
  
  - 打开mysql客户端
  
  C:\mysql-udf\bin>mysql -uroot -p
  
  Enter password:
  
  Welcome to the MySQL monitor. Commands end with ; or \g.
  
  Your MySQL connection id is 2 to server version: 3.23.52-max-nt
  
  Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
  
  mysql> CREATE FUNCTION my_name RETURNS STRING SONAME "my_udf.dll";
  
  Query OK, 0 rows affected (0.08 sec)
  
  mysql> select my_name();
  
  mysql> drop function my_name;
  
  Query OK, 0 rows affected (0.00 sec)

  
以下是MySQL技术人员的回信原文:
  
以下为引用的内容:

  Sorry this isn't a bug.
  
  Below I pasted a sample I did sometime ago for another user:
  
  Ok. Assuming you have VC++ and the source distribution and a server
  
  running,
  
  I will create a UDF that returns a name:
  
  Note: the sample is ugly, but the purpose here is to show you how
  
  to handle the UDF.
  
  - Open the mysqld.dsw workspace.
  
  - Add New project to the workspace
  
  - Project name: my_udf
  
  - Select Win32 Dynamic-Link Library
  
  - Click OK
  
  - Select An Empty DLL project
  
  - Click Finish
  
  - Click OK
  
  - Add a new file called my_udf.cpp to the project:
  
  #include
  
  #include
  
  #include
  
  extern "C" {
  
  char *my_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null,
  
  char *error);
  
  }
  
  char *my_name(UDF_INIT *initid, UDF_ARGS *args, char *is_null,
  
  char *error)
  
  {
  
  char * me = "my name";
  
  return me;
  
  }
  
  - Type Ctrl+N for to create a new file.
  
  - Select text type
  
  - File name: my_udf.def
  
  - Edit the above file with the below contents:
  
  LIBRARY UDF_EXAMPLE
  
  DESCRIPTION 'Example Using UDF with VC++'
  
  VERSION 1.0
  
  EXPORTS
  
  my_name
  
  - Right Click the my_udf project and select Settings
  
  - Click the C/C++ tab
  
  - Select General in the Category Combo
  
  - Add the macro HAVE_DLOPEN to the PreProcessor definition
  
  - Select Preprocessor in the Category Combo
  
  - Add the include path to the text box: Additional Include directories
  
  e.g: ../include
  
  - Press F7 for to build the DLL.
  
  - Copy the my_udf.dll to the environment path directory:
  
  \winnt\system32 for example.
  
  - Start the mysql client and issue:
  
  C:\mysql-udf\bin>mysql -uroot -p
  
  Enter password:
  
  Welcome to the MySQL monitor. Commands end with ; or \g.
  
  Your MySQL connection id is 2 to server version: 3.23.52-max-nt
  
  Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
  
  mysql> CREATE FUNCTION my_name RETURNS STRING SONAME "my_udf.dll";
  
  Query OK, 0 rows affected (0.08 sec)
  
  mysql> select my_name();
  
  mysql> drop function my_name;
  
  Query OK, 0 rows affected (0.00 sec)