【问题标题】:converting text field from latin1_swedish to utf8?将文本字段从 latin1_swedish 转换为 utf8?
【发布时间】:2025-11-29 06:20:18
【问题描述】:

大家好,有没有一种安全的方法可以将表格从 latin1_swedish 转换为完全 utf8?

谁能给我解释一下安全操作的步骤是什么?

(也许使用 phpmyadmin 不知道)

【问题讨论】:

    标签: mysql unicode collections utf-8


    【解决方案1】:

    我假设 latin1_swedish_ci 是您的数据库服务器的默认排序规则。在这种情况下,我使用以下排序规则:

    • 数据库:默认值 (latin1 & latin1_swedish_ci)
    • 表格:默认值(latin1 和 latin1_swedish_ci)
    • 列:utf8 和 utf8_unicode_ci 需要时使用默认值(latin1 和 latin1_swedish_ci),否则。

    这个问题可以有多种解决方案,但以下解决方案在某些最坏的情况下也适用于我。

    步骤:

    1. 将结构复制到新表。
    2. 更改字符集和排序规则 表字段到 utf8 & utf8_unicode_ci 分别为 需要。
    3. 用旧表中的数据填充新表,使用CONVERT

      --复制表结构

      CREATE TABLE `table_name` LIKE `old_table_name`;

      --随意更改排序规则

      ALTER TABLE `table_name`

      改变`column_name1` `column_name1` VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL,

      改变`column_name2` `column_name2` VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL;

      -- 导入数据

      INSERT INTO `table_name` (`id`,`column_name1`,`column_name2`,`column_name3`)

      选择`id`,

      CONVERT(CONVERT(_latin1 `column_name1` USING binary) USING utf8) collat​​e utf8_unicode_ci,

      CONVERT(CONVERT(_latin1 `column_name2` USING binary) USING utf8) collat​​e utf8_unicode_ci,

      `column_name3`

      FROM `old_table_name`

    【讨论】:

      【解决方案2】:
      • Sqlyog Community Edition
      • 备份您的数据库。
      • 在需要编辑的表格上按 F6。
      • 如果需要,禁用右下角的“隐藏语言选项”复选标记。
      • 根据需要更改charsetcollation

      我不确定在转换为 utf8 或从 utf8 转换时有什么具体的陷阱,但如果出现任何问题,备份应该可以很好地为您服务。

      【讨论】:

      • 我不确定我是否可以在生产服务器上安装软件 :(。有没有办法用 phpmyadmin 做到这一点?
      • 我不熟悉 phpmyadmin 但请查看此线程:*.com/questions/153706/…
      • 好的,谢谢这里的查询:mysql_query("ALTER DATABASE $dbname DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci"); $res = mysql_query("显示来自$dbname的表格"); while($row = mysql_fetch_row($res)) { $query = "ALTER TABLE {$dbname}.{$row[0]} CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"; mysql_query($查询); $query = "ALTER TABLE {$dbname}.{$row[0]} DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci";