【发布时间】:2013-06-06 00:08:21
【问题描述】:
我们有一个用 PHP 编写的系统,这些年来它已经变得相当庞大。数据库是 MySQL(InnoDB 表),目前有超过 12GB 的数据,有数百个表,其中许多有超过 1200 万条记录!
问题是,很多表/列(但不是全部)都在 latin1 中,我们(显然)在存储外来字符时遇到了问题。
我们将所有表格/文本列转换为 UTF8 且停机时间尽可能短的最佳方式是什么?
该系统有数百人 24/7 全天候使用,因此长时间停机确实不是一种选择。
有没有任何方法可以在没有大量停机时间的情况下成功地做到这一点,有什么明显的事情需要我们注意吗?
我知道我们需要设置以下内容以使我们的应用程序使用 utf-8:
<meta http-equiv="content-type" content="text/html; charset=utf-8" />ini_set('default_charset', 'utf-8');SET NAMES utf8- 上传文件之前在我们的 IDE 中编码为 UTF8 的文件
我阅读了其他各种帖子,但似乎每个人都在建议不同的方法,有些人说它需要完整的数据库转储/恢复......这意味着停机时间会持续数小时。
那么最好的方法是什么?
【问题讨论】:
-
您是否尝试阅读此问题:stackoverflow.com/questions/2543993/…
-
我在问是否有任何方法可以在不转储和重新导入整个数据库的情况下执行此操作。我猜,完全恢复可能意味着大约 15 小时以上的停机时间。我们有一个备份数据库服务器,我们将所有内容复制到该服务器。我正在寻找比超过 15 小时的停机时间更好的解决方案,也许是一些巧妙的复制想法,使我们的备份副本变成 UTF8,这样我们就可以切换等等。
-
您可以使用
alter table tablename convert to charset utf8一次转换一个表格。对于较小的表,这应该相当快,因此您可以在数据库运行的情况下执行此操作,因此只有具有数百万条记录的大表才是问题。 -
@Joni:12GB 是 12 十亿 字节,所以在这种情况下,平均记录大小约为 1KB。
-
@MichaelMadsen 你当然是对的,现在说得通了。
标签: php mysql utf-8 character-encoding latin1