【问题标题】:replace all the vowels in a mysql column with a random vowel用随机元音替换mysql列中的所有元音
【发布时间】:2018-10-07 11:45:03
【问题描述】:

我有一个带有表 Clients 的 mysql 数据库,并希望通过将 FirstName 和 LastName 列的所有元音替换为随机元音来隐藏我的敏感数据(以将数据库提供给开发人员)。

所以在字符串中找到的所有“A”、“E”、“I”、“O”、“U”都应该替换为“A”、“E”、“I”组中的一个随机字母, "O", "U"。

同样,所有的“a”、“e”、“i”、“o”、“u”都应该替换为“a”、“e”、“i”、“o”组中的一个随机字母, "你"。

谢谢你的回答。

【问题讨论】:

标签: mysql sql random obfuscation


【解决方案1】:

这不漂亮,但我工作。

SELECT name,
    replace(
    replace(
    replace(
    replace(
    replace(
    replace(
        name,'a',mid('aeiuoy',rand()*5+1,1))
            ,'e',mid('aeiuoy',rand()*5+1,1))
            ,'i',mid('aeiuoy',rand()*5+1,1)) 
            ,'u',mid('aeiuoy',rand()*5+1,1)) 
            ,'o',mid('aeiuoy',rand()*5+1,1)) 
            ,'y',mid('aeiuoy',rand()*5+1,1)) 
        as codedname
FROM names;

如果你想更随机地替换,你应该这样创建一个函数:

CREATE FUNCTION `fReplaceVowels`(s varchar(255)) RETURNS varchar(255) CHARSET latin1
BEGIN
declare v_max int unsigned;
declare v_counter int unsigned default 1;
declare result varchar(255);

set result = s;
set v_max = LENGTH(s);

  while v_counter < v_max do
    if (select binary  'aeiuoy' like concat('%', mid(s,v_counter,1),'%') ) then
        set result=concat(left(result,v_counter-1),mid('aeiuoy',rand()*5+1,1),mid(result,v_counter+1));
    end if;
    if (select binary  'AEIUOY' like concat('%', mid(s,v_counter,1),'%') ) then
        set result=concat(left(result,v_counter-1),mid('AEIUOY',rand()*5+1,1),mid(result,v_counter+1));
    end if;
    set v_counter=v_counter+1;
  end while;
RETURN result;
END

像这样使用它:

SELECT name, fReplaceVowels(name) as codedname FROM names;

【讨论】:

  • 谢谢!它运作良好!只是一个小问题。字符串的所有元音都被相同的随机元音替换。您能否编辑此请求以使一个字符串中的这些元音被不同的随机元音替换?非常感谢
  • 我添加了一个函数。
【解决方案2】:

这样的东西会起作用,

select translate('The quick brown fOx jumps ovEr the lazy 
dog','aeiouAEIOU','eiouaEIOUA');

                  translate                  
---------------------------------------------
 Thi qaock bruwn fUx jamps uvIr thi lezy dug

translate(column, to_string, from_string) - 对于 from_string,您可以按任意顺序指定字母。 参考文档here

但是一个字符只能被一个字符替换, 即“a”将替换为“e”等。

【讨论】:

    猜你喜欢
    • 2020-05-16
    • 1970-01-01
    • 1970-01-01
    • 2021-08-05
    • 2018-12-17
    • 2020-08-15
    • 1970-01-01
    • 2014-06-17
    • 1970-01-01
    相关资源
    最近更新 更多