mysql 自定义函数 如何传入中文参数?

函数
drop function if exists test1;
CREATE FUNCTION test1(
str1 VARCHAR(200),
str2 VARCHAR(200)
) RETURNS VARCHAR (200) CHARSET utf8
BEGIN
RETURN CONCAT(str1,str2);
END;
sql:
select test1('我是','中文');

报错:
[SQL]select test1('我是','中文');
[Err] 1366 - Incorrect string value: '\xE6\x88\x91\xE6\x98\xAF' for column 'str1' at row 342

输入非中文是可以得到结果,输入中文就会报错,求大神解答
是数据库字符编码问题,改成utf8就可以了
貌似不会关闭问题,随便来个人 送分了




四季花海
浏览 2092回答 3
3回答

米脂

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849CREATE&nbsp;FUNCTION&nbsp;`fristPinyin`(P_NAME&nbsp;VARCHAR(255))&nbsp;RETURNS&nbsp;varchar(255)&nbsp;CHARSET&nbsp;utf8BEGIN&nbsp;&nbsp;&nbsp;&nbsp;DECLARE&nbsp;V_RETURN&nbsp;VARCHAR(255);&nbsp;&nbsp;&nbsp;&nbsp;SET&nbsp;V_RETURN&nbsp;=&nbsp;ELT(INTERVAL(CONV(HEX(left(CONVERT(P_NAME&nbsp;USING&nbsp;gbk),1)),16,10),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xB0A1,0xB0C5,0xB2C1,0xB4EE,0xB6EA,0xB7A2,0xB8C1,0xB9FE,0xBBF7,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xBFA6,0xC0AC,0xC2E8,0xC4C3,0xC5B6,0xC5BE,0xC6DA,0xC8BB,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xC8F6,0xCBFA,0xCDDA,0xCEF4,0xD1B9,0xD4D1),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'A','B','C','D','E','F','G','H','J','K','L','M','N','O','P','Q','R','S','T','W','X','Y','Z');&nbsp;&nbsp;&nbsp;&nbsp;RETURN&nbsp;V_RETURN;ENDpinyin&nbsp;:此函数是将一个中文字符串对应拼音母的每个相连&nbsp;(例如:"中国人"->ZGR)复制代码&nbsp;代码如下:&nbsp;CREATE&nbsp;FUNCTION&nbsp;`pinyin`(P_NAME&nbsp;VARCHAR(255))&nbsp;RETURNS&nbsp;varchar(255)&nbsp;CHARSET&nbsp;utf8BEGIN&nbsp;&nbsp;&nbsp;&nbsp;DECLARE&nbsp;V_COMPARE&nbsp;VARCHAR(255);&nbsp;&nbsp;&nbsp;&nbsp;DECLARE&nbsp;V_RETURN&nbsp;VARCHAR(255);&nbsp;&nbsp;&nbsp;&nbsp;DECLARE&nbsp;I&nbsp;INT;&nbsp;&nbsp;&nbsp;&nbsp;SET&nbsp;I&nbsp;=&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;SET&nbsp;V_RETURN&nbsp;=&nbsp;'';&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;I&nbsp;<&nbsp;LENGTH(P_NAME)&nbsp;do&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SET&nbsp;V_COMPARE&nbsp;=&nbsp;SUBSTR(P_NAME,&nbsp;I,&nbsp;1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;(V_COMPARE&nbsp;!=&nbsp;'')&nbsp;THEN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#SET&nbsp;V_RETURN&nbsp;=&nbsp;CONCAT(V_RETURN,&nbsp;',',&nbsp;V_COMPARE);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SET&nbsp;V_RETURN&nbsp;=&nbsp;CONCAT(V_RETURN,&nbsp;fristPinyin(V_COMPARE));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#SET&nbsp;V_RETURN&nbsp;=&nbsp;fristPinyin(V_COMPARE);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;END&nbsp;IF;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SET&nbsp;I&nbsp;=&nbsp;I&nbsp;+&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;while;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;(ISNULL(V_RETURN)&nbsp;or&nbsp;V_RETURN&nbsp;=&nbsp;'')&nbsp;THEN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SET&nbsp;V_RETURN&nbsp;=&nbsp;P_NAME;&nbsp;&nbsp;&nbsp;&nbsp;END&nbsp;IF;&nbsp;&nbsp;&nbsp;&nbsp;RETURN&nbsp;V_RETURN;END&nbsp;示例:复制代码&nbsp;代码如下:&nbsp;mysql>&nbsp;select&nbsp;p.province,&nbsp;fristPinyin(p.province),&nbsp;pinyin(p.province)&nbsp;from&nbsp;province&nbsp;p;+------------------+-------------------------+--------------------+|&nbsp;province&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;fristPinyin(p.province)&nbsp;|&nbsp;pinyin(p.province)&nbsp;|+------------------+-------------------------+--------------------+|&nbsp;北京市&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;BJS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;||&nbsp;天津市&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;T&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;TJS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;||&nbsp;河北省&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;HBS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;||&nbsp;山西省&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;S&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;SXS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;||&nbsp;内蒙古自治区&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;N&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;NMGZZQ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|+------------------+-------------------------+--------------------+5&nbsp;rows&nbsp;in&nbsp;set

繁星coding

中文看做字符串处理传入即可。比如创建hello函数,传入'你好'mysql> CREATE FUNCTION hello (s CHAR(20))mysql> RETURNS CHAR(50) DETERMINISTIC-> RETURN CONCAT('Hello, ',s,'!');Query OK, 0 rows affected (0.00 sec)mysql> SELECT hello('你好');+----------------+| hello('world') |+----------------+| 你好! |+----------------+1 row in set (0.00 sec)
打开App,查看更多内容
随时随地看视频慕课网APP