You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将latin1_swedish_ci字符串转为印地语文本并存储为utf8_unicode_ci

解决latin1_swedish_ci转utf8_unicode_ci的印地语乱码问题

单条字符串修复方法

你的示例乱码是因为UTF-8编码的印地语文本被错误以latin1(ISO-8859-1)格式存储导致的,通过编码转换即可还原:

PHP代码实现

$latin1_str = "अपने पà¥à¤¯à¤¾à¤° से अपनी दिल की बात कहेà¤";
// 方法1:用mb_convert_encoding
$utf8_str = mb_convert_encoding($latin1_str, 'UTF-8', 'ISO-8859-1');
// 方法2:用iconv
$utf8_str = iconv('ISO-8859-1', 'UTF-8', $latin1_str);

还原后正确文本:अपने प्यार से अपनी दिल की बात कहें(注:示例字符串末尾缺失字符,此为补全语义后的完整结果)

百万级数据库批量转换方案

方案1:SQL直接转换(高效推荐)

直接通过SQL修改表/字段的字符集,需按以下步骤操作(避免直接转换导致乱码恶化):

  1. 先备份数据库,防止操作失误丢失数据。
  2. 将目标表/字段转换为binary字符集,保留原始字节:
    -- 整张表转换
    ALTER TABLE your_table_name CONVERT TO CHARACTER SET binary;
    -- 单个字段转换
    ALTER TABLE your_table_name MODIFY COLUMN your_column_name TEXT CHARACTER SET binary;
    
  3. 再转换为utf8mb4(兼容所有印地语字符),排序规则设为utf8_unicode_ci:
    -- 整张表转换
    ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8_unicode_ci;
    -- 单个字段转换
    ALTER TABLE your_table_name MODIFY COLUMN your_column_name TEXT CHARACTER SET utf8mb4 COLLATE utf8_unicode_ci;
    

方案2:程序批量处理(适合需要额外逻辑的场景)

如果需要通过代码处理,可分批次读写避免内存溢出,以PHP为例:

// 连接数据库(指定latin1编码读取原始数据)
$pdo = new PDO('mysql:host=localhost;dbname=your_db;charset=latin1', 'username', 'password');
$pdo->exec("SET NAMES latin1");

$batchSize = 1000; // 每次处理1000条
$offset = 0;

while (true) {
    // 分批次查询数据
    $stmt = $pdo->prepare("SELECT id, target_column FROM your_table LIMIT :offset, :batchSize");
    $stmt->bindParam(':offset', $offset, PDO::PARAM_INT);
    $stmt->bindParam(':batchSize', $batchSize, PDO::PARAM_INT);
    $stmt->execute();
    $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    if (empty($rows)) break;

    // 批量更新转换后的数据
    $updateStmt = $pdo->prepare("UPDATE your_table SET target_column = :utf8_text WHERE id = :id");
    foreach ($rows as $row) {
        $utf8Text = mb_convert_encoding($row['target_column'], 'UTF-8', 'ISO-8859-1');
        $updateStmt->bindParam(':utf8_text', $utf8Text);
        $updateStmt->bindParam(':id', $row['id']);
        $updateStmt->execute();
    }

    $offset += $batchSize;
}

后续注意事项

  • 转换完成后随机抽查数据,验证印地语文本是否正确显示。
  • 后续数据库连接需指定utf8mb4编码,避免再次出现乱码问题。

内容的提问来源于stack exchange,提问作者Ajay Chauhan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 18:47:12