首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >mysql用户定义函数字符集的问题

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

Stack Overflow用户
提问于 2013-06-27 17:42:48
回答 1查看 175关注 0票数 1

我正在尝试创建一个mysql函数来对字符串进行操作。通过在ascii值中添加一个数字(使其成为另一个字符),然后将其连接成字符串,在php上进行更改-所有操作都很好,并且在mysql上执行此操作时,每个字符的值都小于50000 -每个字符的值都大于50000,字段为utf-8。

有什么想法吗?

mysql代码:

代码语言:javascript
运行
复制
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

结果:

代码语言:javascript
运行
复制
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上我看到数字的地方:

代码语言:javascript
运行
复制
... 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上的同一行

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-12 07:03:57

我找到了。在mysql中,非英语字母是2个字节(即55697),而在php中,它是一个字节接一个字节。所以我已经将mysql的回复转换为2个数字,并像php一样进行操作。请注意,对于英文信件,不需要这样做(回复将小于256)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17339802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档