mysql自定义函数

1.今天需要写一个提取汉字转成拼音的首字母,函数如下

CREATE DEFINER=`root`@`localhost` FUNCTION `GET_FIRST_PINYIN_CHAR`(PARAM VARCHAR(255)) RETURNS varchar(2)
BEGIN
	DECLARE V_RETURN VARCHAR(255);
	DECLARE V_FIRST_CHAR VARCHAR(2);
	SET V_FIRST_CHAR = UPPER(LEFT(PARAM,1));
	SET V_RETURN = V_FIRST_CHAR;
	IF LENGTH( V_FIRST_CHAR) <> CHARACTER_LENGTH( V_FIRST_CHAR ) THEN
	SET V_RETURN = ELT(INTERVAL(CONV(HEX(LEFT(CONVERT(PARAM USING gbk),1)),16,10),
		0xB0A1,0xB0C5,0xB2C1,0xB4EE,0xB6EA,0xB7A2,0xB8C1,0xB9FE,0xBBF7,
		0xBFA6,0xC0AC,0xC2E8,0xC4C3,0xC5B6,0xC5BE,0xC6DA,0xC8BB,
		0xC8F6,0xCBFA,0xCDDA,0xCEF4,0xD1B9,0xD4D1),
	'A','B','C','D','E','F','G','H','J','K','L','M','N','O','P','Q','R','S','T','W','X','Y','Z');
	END IF;
	RETURN V_RETURN;
END

然后在打开cmd,选择具体的数据库,把以上都复制进行执行,提示1418错误

2.然后在打开cmd,选择具体的数据库,把以上都复制进行执行,提示1418错误,错误解决

具体错误内容:This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you might want to use the less safe log_bin_trust_function_creators variable)
解决:(参考:https://www.cnblogs.com/lays/p/5555103.html)
先去查询 show variables like '%func%' ;这个语句,如果该语句最后输出的值是OFF
那么就用下面的语句去修改就可以:set global log_bin_trust_function_creators = 1

3.然后再use某个数据库,把 1 中的语句复制过去执行,提示语法错误???解决如下:

参考:https://blog.csdn.net/zhonghuachun/article/details/78716029
把1中的指令修改如下(查了好久知道要重置结束符来解决这个问题):

delimiter $$
CREATE DEFINER=`root`@`localhost` FUNCTION `GET_FIRST_PINYIN_CHAR`(PARAM VARCHAR(255)) RETURNS varchar(2)
BEGIN
	DECLARE V_RETURN VARCHAR(255);
	DECLARE V_FIRST_CHAR VARCHAR(2);
	SET V_FIRST_CHAR = UPPER(LEFT(PARAM,1));
	SET V_RETURN = V_FIRST_CHAR;
	IF LENGTH( V_FIRST_CHAR) <> CHARACTER_LENGTH( V_FIRST_CHAR ) THEN
	SET V_RETURN = ELT(INTERVAL(CONV(HEX(LEFT(CONVERT(PARAM USING gbk),1)),16,10),
		0xB0A1,0xB0C5,0xB2C1,0xB4EE,0xB6EA,0xB7A2,0xB8C1,0xB9FE,0xBBF7,
		0xBFA6,0xC0AC,0xC2E8,0xC4C3,0xC5B6,0xC5BE,0xC6DA,0xC8BB,
		0xC8F6,0xCBFA,0xCDDA,0xCEF4,0xD1B9,0xD4D1),
	'A','B','C','D','E','F','G','H','J','K','L','M','N','O','P','Q','R','S','T','W','X','Y','Z');
	END IF;
	RETURN V_RETURN;
END
$$

mysql自定义函数_第1张图片

4.然后终于可以执行了,结果又报3719警告?

警告如下:
在这里插入图片描述
解决:
1.先使用指令查询当前字符集
SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
2.到ini文件中修改
mysql自定义函数_第2张图片
3.重启mysql服务,重启后如果自定义函数还会出现2中的1418错误,再设置一次就好。然后再用指令查询当前字符集发现如下确实已改,然后运行程序,还是会报警告,所以到这不管了!!!
mysql自定义函数_第3张图片

你可能感兴趣的:(MySQL)