【问题标题】:Transfer old 3.23.49 MySQL database to 5.0.51 MySQL database - Encoding in ANSI and UTF-8将旧的 3.23.49 MySQL 数据库转移到 5.0.51 MySQL 数据库 - ANSI 和 UTF-8 编码
【发布时间】:2011-11-17 14:12:29
【问题描述】:

我想将 3.23.49 的 MySQL 数据库转移到 5.0.51 的 MySQL 数据库。现在我已经导出了 SQL 文件,可以导入了。我查看了 sql 文件,Notepad++ 告诉我文件是用 ANSI 编码的。我查看了这些值,其中一些在 ANSI 中,其中一些在 UTF-8 中。最好的方法是什么?

  1. 我应该在 Notepad++ 中更改编码吗?
  2. 我应该使用ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8;吗?
  3. 我应该使用 iconv 吗?
  4. 我是否必须查看每个表并进行必要的更改?
  5. 导入的设置是什么? MYSQL323 兼容模式和编码 latin1?
  6. 如果 php 脚本使用其他编码,我是否必须注意一些事情?

感谢您的提示!

【问题讨论】:

  • some of them are in ANSI and some of them are in UTF-8 是什么意思?据我所知,ANSI 是mysqldump 的一种模式,它与文件的编码无关。
  • 该文件根据 Notepad++ ANSI 编码。我有带有变音符号(äöü...)的条目,它们显示正确。在另一个表中,我有一个 ü whis 表示为 ü - UTF-8 编码。如果我使用 Notepad++ 将编码更改为 UTF-8,则 UTF-8 字符是可以的,但 ANSI 字符就像xF6.这就是情况的样子。
  • 那么你的意思可能是ascii,或者更好的单字节编码)
  • 这些表(真的是列),其中变音符号看起来不同,有不同或相同的编码吗?如果编码相同,那么您的数据几乎已损坏,您需要有选择地(其中的 n 个特定部分)使用 iconv 将其转换为一种编码。
  • 数据库有不同的表。一个表比 ASCII,另一个 UTF-8。我知道系统有一些编码问题,现在我想解决它。但是同一张表的编码是一样的。

标签: mysql encoding migration transfer


【解决方案1】:

如果问题是导入一个utf8编码的mysql转储,解决方法通常是在mysql选项中添加--default-character-set=utf8

mysql --default-character-set=utf8 -Ddbname -uuser -p < dump.sql

UPD1:如果转储文件损坏,我会尝试逐表再次导出数据库,以便转储生成正确的 utf8 编码文件。

【讨论】:

  • 我只有 phpmyadmin 来导入 sql-dump。我的问题是有两种不同的编码,我认为它们应该全部合并到 UTF-8。
  • 我尝试导出一张表(使用 ANSI 编码)。 Notepad++ 向我展示了 ANSI 编码。如果我导出 UTF-8 表之一,Notepad++ 会显示没有 BOM 的 UTF-8。那么我应该逐个查看每个表并导出表吗?那么我应该在必要时将编码从 ANSI 更改为 UTF-8(使用 iconv 吗?)?
  • @testing,是的,我会那样做。
【解决方案2】:

四年前我已经将一个 MySQL 4.0 数据库(还没有字符编码的概念)转换为 MySQL 5.0,所以是 BTDT。

但首先,没有“ANSI”字符编码;也就是a misconception and a misnomer that has caught on from the early versions of Windows(有ANSI escape sequences,但跟字符编码无关)。您肯定会看到 Windows‑1252 编码的文本。您应该将该文本转换为 UTF-8,因为这样您就有最好的机会保持所有使用的字符完整(UTF-8 是Unicode 编码,Unicode 包含所有可以用 Windows-125x 编码的字符,但在不同的代码点)。

我曾使用iconvrecode 程序(在运行 MySQL 服务器的 Debian GNU/Linux 系统上)将 MySQL 导出(由 phpMyAdmin 创建)的 Windows-1252 编码文本转换为 UTF -8。使用最适合您的任何程序或程序组合。

关于你的问题:

  1. 您可以尝试,但可能行不通。特别是,您可能无法使用 Notepad++ 或其他文本编辑器打开大型数据库转储。
  2. 视情况而定。 ALTER TABLE … CONVERT TO … 不仅仅是转换编码。
  3. 参见上面的段落。
  4. 是的。您应该将要导入数据的每个表和每个文本字段的字符编码设置为utf8(使用最适合您的目的或数据的utf8_… 排序规则)。 ALTER TABLE … CONVERT TO … 就是这样做的。 (但请参见 2。)
  5. 我认为MYSQL323 在这里并不重要,因为您的导出将仅包含CREATEINSERTALTER 语句。但请先查看手册(phpMyAdmin 中设置旁边的“?”图标)。 latin1 means "Windows-1252" in MySQL 5.0,以便可能工作,然后您必须跳过导入手动转换。李>
  6. 我不这么认为; PHP is not yet Unicode-aware。重要的是 PHP 脚本如何处理数据。通常,使用该数据生成的文本资源的 Content-Type 标头字段应以 ; charset=UTF-8 结尾。

另外说明,您不应该再使用 MySQL 5.0.x。 当前的稳定版本是 MySQL 5.5.18。 “根据 MySQL 支持生命周期政策,active support for MySQL 5.0 ended on December 31, 2009MySQL 5.0 现在处于扩展支持阶段。” MySQL 5.0.0 Alpha 已于 2003 年 12 月 22 日发布,扩展支持预计将在此之后的 8 年结束2011-12-31(今年)

【讨论】:

  • @testing 第 1 点的源代码。 2 特意是指向 MySQL 手册相应部分的链接。我认为我不能(或应该尝试)更好地解释它。
猜你喜欢
  • 1970-01-01
  • 2015-07-09
  • 2018-01-27
  • 1970-01-01
  • 1970-01-01
  • 2017-07-15
  • 2018-11-21
  • 2014-01-15
  • 2012-10-15
相关资源
最近更新 更多