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