如何替换大型MySQL表中的单个字符

时间:2012-01-03 14:20:06

标签: mysql character-encoding joomla collation

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

无论如何,我的客户端有一个旧的joomla 1.0安装程序,该网站是用克罗地亚语进行的。这意味着我必须处理像Č,č,Ć,ć,Đ,đ这样的人物...旧数据库在latin1_swedish_ci校对中,我已经将它与迁移脚本一起转移到了utf8_general_ci中的joomla 1.5的新数据库。

导致(如预期的那样)某些字符混淆,例如: ć成为è,È - > Č等......

将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“不可读”的文档中找到的。

1 个答案:

答案 0 :(得分:6)

FULLTEXT是mysql中的reserved word,如果您的列名具有相同的名称,则需要通过后面的刻度(`)进行转义。

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