MySQL自定义函数(一)- 简单使用篇

MySQL自定义函数:


整理下MySQL自定义函数的使用,以前用的时候没整理下来,现在来边回顾边记录下。

我们平时写SQL的时候,都会用到系统函数,什么字符串函数,日期函数,这都是每个数据库自带的,当这些函数不能满足我们的需求的时候,我们也可以自定义函数,怎么操作呢?

语法
CREATE
    [DEFINER = user]
    FUNCTION sp_name ([func_parameter[,...]])
    RETURNS type
    [characteristic ...] routine_body

func_parameter:
    param_name type

type:
    Any valid MySQL data type

characteristic:
    COMMENT 'string'
  | LANGUAGE SQL
  | [NOT] DETERMINISTIC
  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  | SQL SECURITY { DEFINER | INVOKER }

routine_body:
    Valid SQL routine statement

create function 就是创建一个函数的基本语法,然后我们得有函数名,我们定义的函数有没有参数,返回值是什么,然后就是具体的逻辑了。

Hello World!

好了,我们来一个MySQL UDF版的Hello World

create function say_hi() returns varchar(20)
return 'hello world!'
;

每次调用这个函数,就会返回'hello world!'


下面,进阶一下,我们传个参数进去,

create function say_hi_to_you(user_name varchar(10)) returns varchar(20)
return concat('hello ',user_name)
;

实际用的时候,也和其他函数一样,


  • 注意
    这时候,我们传个中文的名字试试


看上去,像是字符编码的问题,然后,在网上找了找,没有找到类似的问题,但是,隐约感觉可以通过增加字符编码搞定,就试了下

create function say_hi_to_you(user_name varchar(10)) returns varchar(20) charset utf8
return user_name;

我就在函数返回的时候,加上了utf-8编码,但是还是不行,困惑了好一会儿,想到,返回值设置了编码,参数应该也可以设置编码吧,就改了下

create function say_hi_to_you(user_name varchar(10) charset utf8) returns varchar(20) charset utf8
return user_name;

这下可以了,我感觉这个应该和数据库配置有关,我这里没有该数据库默认编码为UTF-8,如果改了的话,估计没有这个问题。

简单使用篇想到这里了。

参考文档

官方介绍:https://dev.mysql.com/doc/refman/5.7/en/create-procedure.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容