MySQL自定義函數(shù):
整理下MySQL自定義函數(shù)的使用食绿,以前用的時候沒整理下來侈咕,現(xiàn)在來邊回顧邊記錄下。
我們平時寫SQL的時候器紧,都會用到系統(tǒng)函數(shù)耀销,什么字符串函數(shù),日期函數(shù)品洛,這都是每個數(shù)據(jù)庫自帶的树姨,當這些函數(shù)不能滿足我們的需求的時候,我們也可以自定義函數(shù)桥状,怎么操作呢帽揪?
語法
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 就是創(chuàng)建一個函數(shù)的基本語法,然后我們得有函數(shù)名辅斟,我們定義的函數(shù)有沒有參數(shù)转晰,返回值是什么,然后就是具體的邏輯了士飒。
Hello World查邢!
好了,我們來一個MySQL UDF版的Hello World
create function say_hi() returns varchar(20)
return 'hello world!'
;
每次調(diào)用這個函數(shù)酵幕,就會返回'hello world!'
下面扰藕,進階一下,我們傳個參數(shù)進去芳撒,
create function say_hi_to_you(user_name varchar(10)) returns varchar(20)
return concat('hello ',user_name)
;
實際用的時候邓深,也和其他函數(shù)一樣,
-
注意
這時候笔刹,我們傳個中文的名字試試
看上去芥备,像是字符編碼的問題,然后舌菜,在網(wǎng)上找了找萌壳,沒有找到類似的問題,但是日月,隱約感覺可以通過增加字符編碼搞定袱瓮,就試了下
create function say_hi_to_you(user_name varchar(10)) returns varchar(20) charset utf8
return user_name;
我就在函數(shù)返回的時候,加上了utf-8編碼爱咬,但是還是不行懂讯,困惑了好一會兒,想到台颠,返回值設置了編碼褐望,參數(shù)應該也可以設置編碼吧勒庄,就改了下
create function say_hi_to_you(user_name varchar(10) charset utf8) returns varchar(20) charset utf8
return user_name;
這下可以了,我感覺這個應該和數(shù)據(jù)庫配置有關(guān)瘫里,我這里沒有該數(shù)據(jù)庫默認編碼為UTF-8实蔽,如果改了的話,估計沒有這個問題谨读。
簡單使用篇想到這里了局装。
參考文檔
官方介紹:https://dev.mysql.com/doc/refman/5.7/en/create-procedure.html