Php 关于在MySQL中将ISO-8859-1数据转换为UTF-8的建议

Php 关于在MySQL中将ISO-8859-1数据转换为UTF-8的建议,php,mysql,unicode,utf-8,character-encoding,Php,Mysql,Unicode,Utf 8,Character Encoding,我们有一个非常大的InnoDB MySQL 5.1数据库,所有表都使用latin1_swedish_ci排序规则。我们希望将ISO-8859-1中的所有数据转换为UTF-8。如果将排序规则更改为utf8\u general\u ci,效果如何 我们是否最好编写一个脚本来转换数据并插入到一个新表中?显然,我们的目标是将重新编码时丢失任何数据的风险降至最低 编辑:我们确实有重音字符、符号等。大约一周前,我不得不做同样的工作(关于ö,ä,å的问题) 创建了一个dump.sql 搜索并将所有CHARSE

我们有一个非常大的InnoDB MySQL 5.1数据库,所有表都使用
latin1_swedish_ci
排序规则。我们希望将ISO-8859-1中的所有数据转换为UTF-8。如果将排序规则更改为
utf8\u general\u ci
,效果如何

我们是否最好编写一个脚本来转换数据并插入到一个新表中?显然,我们的目标是将重新编码时丢失任何数据的风险降至最低


编辑:我们确实有重音字符、符号等。

大约一周前,我不得不做同样的工作(关于
ö,ä,å的问题)

  • 创建了一个
    dump.sql
  • 搜索并将所有
    CHARSET=latin1
    替换为
    CHARSET=utf8
    (在
    dump.sql
    中)
  • 搜索并将所有的
    COLLATE=拉丁文1\u瑞典文\u ci
    替换为
    COLLATE=utf8\u unicode\u ci
    (在
    dump.sql
    中)
  • 使用排序规则
    utf8\u unicode\u ci
    创建了一个新数据库
  • 导入了
    dump.sql
  • 使用
    alterdatabase MY_DB charset=utf8更改了数据库的
    charset
  • 它工作得很好


    注意:在Mike Brant的评论之后,我认为最好手动搜索并替换您特别需要的字段。或者您可以对每个字段简单地使用
    ALTER
    ,而不需要
    dump.sql
    。在我的例子中,它没有做太多的更改,因为我的大多数字段都需要utf编码

    如果数据当前仅使用拉丁字符,并且您只想将字符集和排序规则更改为UTF8以支持将来添加utf-8数据,那么简单地更改字符集和排序规则应该没有问题。当然,我会首先在表的副本中执行此操作。

    在MySQL中,您必须更改数据库、每个表以及每个表中的每个列的编码。除非编写脚本,否则这是一项非常烦人的任务。我们有带重音代码的字符,我想这不是拉丁语?拉丁语字符集中确实存在这些字符。您现在应该可以在数据库中看到它们。而且您不必更改数据库甚至表级别设置。如果用户在定义表(在DB级别设置的情况下)或字段(在表级别设置的情况下)时没有特别指定字符集,则这些字符集和排序规则仅指示将使用的默认字符集和排序规则。可以在同一个表中混合使用字符集和排序规则。请注意,简单地将所有内容更改为UTF-8的方法对存储需求有重大影响,因为这将使整个系统中的所有字符串占用至少两倍的空间。@MikeBrant,我完全同意。必须仅更改包含需要以unicode格式存储的数据的字段。我第一次评论时犯了一个错误+1.