将varchar转换为set

时间:2011-11-24 02:13:48

标签: mysql sql

我继承了一个包含大约6,000个条目的数据库。其中一列表示一组6项作为varchar。一些条目看起来像这样:

A
ABC
A,B,C,D,E,F
ade
ONONONONONONON
onon?" or sleep(10)#onononon

它看起来很垃圾,但我想我想要挽救那些用字母表示的东西,但忽略看起来像注射攻击的结果。

我想要做的是将此列表示为SET类型。我正在考虑(伪代码):

UPDATE MYTABLE 
SET NEWCOLUMN = (NEWCOLUMN & 'A') 
WHERE (REGEX MATCHES OLDCOLUMN)

对6个不同的元素重复此查询6次。

我无法弄明白我的下一步...我似乎无法弄清楚如何编写此更新查询以便它起作用 - 首先,我似乎无法弄清楚如何为mysql写一个正则表达式。

3 个答案:

答案 0 :(得分:1)

老实说,最好的办法是通过PHP,Perl,Python等脚本语言来运行它,然后将这些值分解为新的记录。单个SQL查询将无法完成任务。

答案 1 :(得分:0)

虽然此解决方案不涉及sql,但您可能会发现它很有用。尝试使用Google Refine,它是一个免费的工具,用于清理异类数据集,它有一个很好的gui,允许你使用正则表达式等。

答案 2 :(得分:0)

我只是快速测试了这个,但ALTER TABLE

怎么样
ALTER TABLE mytable MODIFY mycolumn SET('AAA', 'BBB', 'CCC', 'A', 'C');

我先在副本上执行此操作,并确保没有警告,否则您将丢失数据。