Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.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_Redmine - Fatal编程技术网

在MySQL数据库中搜索并替换术语

在MySQL数据库中搜索并替换术语,mysql,redmine,Mysql,Redmine,我最近在我们的问题跟踪程序中添加了一个新项目,即。创建项目时,您为其指定的名称和标识符通常相同。创建项目时需要注意的是,一旦设置了标识符,就不能更改它。出于这个原因,我非常小心地选择了一个通用标识符。不幸的是,我不够小心,把它拼错了!拼写错误的标识符出现在问题跟踪程序URL中。其他开发者和我们合作的另一家公司将会看到这些,所以这是一个非常令人尴尬的错误 因此,我正在寻找关于如何解决这个问题的建议。要么是特定于Redmine的,要么是我可以在数据库级别(MySQL)执行的操作 我已经找到了一个解决

我最近在我们的问题跟踪程序中添加了一个新项目,即。创建项目时,您为其指定的名称和标识符通常相同。创建项目时需要注意的是,一旦设置了标识符,就不能更改它。出于这个原因,我非常小心地选择了一个通用标识符。不幸的是,我不够小心,把它拼错了!拼写错误的标识符出现在问题跟踪程序URL中。其他开发者和我们合作的另一家公司将会看到这些,所以这是一个非常令人尴尬的错误

因此,我正在寻找关于如何解决这个问题的建议。要么是特定于Redmine的,要么是我可以在数据库级别(MySQL)执行的操作

我已经找到了一个解决方案,我可能会去,但我认为这将是值得问在这里无论如何。我希望有人能提供一个更简单的解决方案——也许是一个神奇的SQL单行程序

我找到的解决方案是:

使用mysqldump将数据库转储到SQL 搜索并替换为sed或文本编辑器 从此SQL重新创建数据库。
感谢您的建议。

如果标识符仅限于某列或某组列,您可以使用:

update [table] set [field] = replace([field],'[find]','[replace]');

将括号中的文本替换为您案例中的标识符(视情况而定)。

结果表明,它非常简单:

update `projects` set `identifier` = '[NEWNAME]' where `indentifer` = '[OLDNAME]';

我建议这样做,而不是做垃圾桶。只需确保替换所有表中的每个实例。标识符只存储在一个位置,但用于生成URL,因此它出现在UI的多个位置。我建议这种方法用于拼写错误或非公共项目。更改标识符将破坏任何非Redmine URL,例如搜索结果、来自第三方网站的深度链接。。。