【问题标题】:How to replace single character in large MySQL tables如何替换大型 MySQL 表中的单个字符
【发布时间】:2026-01-11 03:25:01
【问题描述】:

我在将 joomla 从 1.0 升级到 1.5 时遇到了一些问题(我必须一直升级到 1.7;)。

无论如何,我的客户有一个旧的 joomla 1.0 安装,并且该网站是克罗地亚语的。这意味着我必须处理像 Č,č,Ć,ć,Đ,đ 之类的字符...旧数据库在 latin1_swedish_ci 排序规则中,我已经将它与迁移脚本一起转移到了 joomla 1.5 的新数据库中,它在 utf8_general_ci 中。

这导致(如预期的那样)一些字符混淆,例如: ć 变成了 è、È --> Č 等等……

将 1.0 数据库转换为 utf8 排序规则不是一种选择,因为它会在 Č,ć,đ,đ 等第一次出现时切断其余内容...

所以,我正在做的是这个查询:

update jos_content
    set introtext = replace(introtext, 'È', 'Č');

这样做是获取 joomla 内容表,并在所有介绍文本中将 È 替换为 Č。

我也为标题做了这个,但是当我尝试用全文做这个时,我得到了这个错误:

Error
SQL query:

UPDATE jos_content SET FULLTEXT = REPLACE( introtext,  'È',  'Č' ) ;


MySQL said: 

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'fulltext = replace(introtext, 'È', 'Č')' at line 2

所以,这是某种内存问题(毕竟这是一个全文)还是我只是做错了什么。另外,如果有更好的方法来替换所有这些字符,请告诉我,这是我从 MySQL“不可读”文档中发现的。

【问题讨论】:

  • 还要注意复制错误 (?): SET `fulltext` = REPLACE(`fulltext`, ...

标签: mysql character-encoding joomla collation


【解决方案1】:

FULLTEXT 是 mysql 中的 reserved word,如果您的列名具有相同的名称,则需要使用反引号 (`) 进行转义。

UPDATE jos_content SET `FULLTEXT` = REPLACE(introtext, 'È', 'Č');

【讨论】:

  • 大声笑,非常感谢,我完全忘记全文是保留字了。