Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql用户定义函数字符集的问题_Mysql - Fatal编程技术网

mysql用户定义函数字符集的问题

mysql用户定义函数字符集的问题,mysql,Mysql,我试图创建一个mysql函数,对字符串进行操作。每个字符都是通过向其ascii值中添加一个数字(使其成为另一个字符)然后再次将其合并为字符串来更改的 在php上执行此操作-所有操作都很好,每个字符的值都小于256 在mysql上执行此操作-每个字符的值都超过50000 字段为utf-8 有什么想法吗 mysql代码: DROP FUNCTION IF EXISTS wizner_denc; DELIMITER $$ CREATE FUNCTION wizner_denc(code TEXT,ci

我试图创建一个mysql函数,对字符串进行操作。每个字符都是通过向其ascii值中添加一个数字(使其成为另一个字符)然后再次将其合并为字符串来更改的 在php上执行此操作-所有操作都很好,每个字符的值都小于256 在mysql上执行此操作-每个字符的值都超过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
在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上的同一行,我找到了它。 在mysql中,非英语字母是2个字节,它们组合在一起(即55697),而在php中则是一个字节接一个字节。 因此,我将mysql回复转换为2个数字,并进行了与php相同的操作。
请注意,对于英文字母,没有必要这样做(回复将小于256)

显然,“向其ascii值添加一个数字”和“字段为utf-8”不能很好地混合。顺便说一句,看起来你正在尝试实现你自己形式的(非常基本的)“加密”。。。您应该使用已经实现的加密函数之一。您是对的,我正在创建自己的加密。移动到已经实现的功能不是一个选项
... 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