曾以为Windows版本的MySQL存在不能使用UDF的BUG诸提交了一个bug报告。不过 似乎发现是我搞错了,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 <stdlib.h> #include <winsock.h> #include <mysql.h>
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 Ente |