我正在尝试创建一个对字符串进行操作的mysql函数。通过在其ascii值中添加一个数字(使其成为另一个char)来更改每个char,然后再将其连接到一个字符串 在php上执行它 - 一切正常,每个char的值小于256 在mysql上执行它 - 每个char获得的值超过50000 字段是utf-8
任何想法?
mysql代码:
DROP FUNCTION IF EXISTS wizner_denc;
DELIMITER $$
CREATE FUNCTION wizner_denc(code TEXT,ciper TEXT)
RETURNS TEXT CHARSET utf8 READS SQL DATA
BEGIN
DECLARE enc_str TEXT;
DECLARE kk INT;
DECLARE kmax INT;
DECLARE cc TEXT;
DECLARE stp TEXT;
DECLARE cmax INT;
DECLARE code_idx INT;
SET enc_str=CHARSET(ciper);
SET code_idx = 1;
SET kk = 1;
SET kmax=LENGTH(ciper);
SET cmax=LENGTH(code);
WHILE (kk < kmax) DO
SET cc=ORD(SUBSTRING(ciper,kk,1));
SET stp = SUBSTRING(code, code_idx, 1);
SET cc=cc-stp;
IF cc <= 0 THEN
SET cc=250+cc;
END IF;
SET enc_str=CONCAT(enc_str,'...cc=',cc,'...stp=',stp,'|||');
SET enc_str=CONCAT(enc_str,CHAR(cc));
SET code_idx=code_idx+1;
IF code_idx >= cmax THEN
SET code_idx=1;
END IF;
SET kk = kk + 1;
END WHILE;
RETURN enc_str;
END;
$$
DELIMITER ;
SET NAMES utf8;
SELECT wizner_denc('232323',CONVERT(address USING utf8)),address FROM `demo_clients_tbl` WHERE 1
结果:
utf8...cc=55697...stp=2|||ّ...cc=55721...stp=3|||٩...cc=55704...stp=2|||٘...cc=55720...stp=3|||٨...cc=248...stp=2|||...cc=248...stp=2|||...cc=247...stp=3|||
在php上我看到数字:
... cc-217 stp=2
... cc-147 stp=3
... cc-217 stp=2
... cc-172 stp=3
... cc-217 stp=2
... cc-154 stp=3
... cc-217 stp=2
... cc-171 stp=3
表示DB
上的同一行答案 0 :(得分:0)
我找到了。 在mysql中,非英文字母是2个字节,它们组合在一起(即55697),而在php中,它是逐字节的。 所以我已经将mysql回复转换为2个数字,并在php中进行操作。 请注意,对于英文字母,不需要(回复将小于256)