为了账号安全,请及时绑定邮箱和手机立即绑定

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

/ 猿问

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

四季花海 2019-01-29 11:07:18

函数
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就可以了
貌似不会关闭问题,随便来个人 送分了




查看完整描述

3 回答

?
weixin_子问3652660

参数后面添加 charset utf8

查看完整回答
反对 回复 2019-07-31
?
米脂
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849CREATE FUNCTION `fristPinyin`(P_NAME VARCHAR(255)) RETURNS varchar(255) CHARSET utf8BEGIN    DECLARE V_RETURN VARCHAR(255);    SET V_RETURN = ELT(INTERVAL(CONV(HEX(left(CONVERT(P_NAME 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');    RETURN V_RETURN;ENDpinyin :此函数是将一个中文字符串对应拼音母的每个相连 (例如:"中国人"->ZGR)复制代码 代码如下: CREATE FUNCTION `pinyin`(P_NAME VARCHAR(255)) RETURNS varchar(255) CHARSET utf8BEGIN    DECLARE V_COMPARE VARCHAR(255);    DECLARE V_RETURN VARCHAR(255);    DECLARE I INT;    SET I = 1;    SET V_RETURN = '';    while I < LENGTH(P_NAME) do        SET V_COMPARE = SUBSTR(P_NAME, I, 1);        IF (V_COMPARE != '') THEN            #SET V_RETURN = CONCAT(V_RETURN, ',', V_COMPARE);            SET V_RETURN = CONCAT(V_RETURN, fristPinyin(V_COMPARE));            #SET V_RETURN = fristPinyin(V_COMPARE);        END IF;        SET I = I + 1;    end while;    IF (ISNULL(V_RETURN) or V_RETURN = '') THEN        SET V_RETURN = P_NAME;    END IF;    RETURN V_RETURN;END 示例:复制代码 代码如下: mysql> select p.province, fristPinyin(p.province), pinyin(p.province) from province p;+------------------+-------------------------+--------------------+| province         | fristPinyin(p.province) | pinyin(p.province) |+------------------+-------------------------+--------------------+北京市           | B                       | BJS                || 天津市           | T                       | TJS                |河北省           | H                       | HBS                || 山西省           | S                       | SXS                |内蒙古自治区     | N                       | NMGZZQ             |+------------------+-------------------------+--------------------+5 rows in set


查看完整回答
反对 回复 2019-03-15
?
繁星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)



查看完整回答
反对 回复 2019-03-15

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信