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

MySQL中丹麦语字母排序异常问题求助

解决MySQL城市名称排序错误的方案

问题根源

你遇到的排序错误本质是数据编码存储异常:数据库中显示的København是UTF-8字符København被错误存储为latin1编码导致的乱码。此时即便指定丹麦语排序规则,MySQL也是基于乱码的字节值排序,自然不符合逻辑。

修复步骤

1. 修正数据编码(核心)

先将存储的乱码字节转换为正确的UTF-8字符,同时设置正确的排序规则:

-- 第一步:将city字段临时改为latin1字符集(保留原始字节不转换)
ALTER TABLE your_postcode_table MODIFY COLUMN city VARCHAR(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci;

-- 第二步:将字段改为utf8mb4(推荐,支持全UTF-8字符)并设置丹麦语排序规则
ALTER TABLE your_postcode_table MODIFY COLUMN city VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_danish_ci;

注意替换your_postcode_table为你的实际表名;若仍需使用utf8(即utf8mb3),可将utf8mb4替换为utf8,但推荐用utf8mb4兼容更多字符。

2. 确保PHP数据库连接编码正确

避免后续再出现编码存储问题,PHP连接MySQL时需明确指定UTF-8编码:

  • 若使用PDO:
    $pdo = new PDO('mysql:host=localhost;dbname=your_db;charset=utf8mb4', 'user', 'pass');
    
  • 若使用mysqli:
    $conn = mysqli_connect('localhost', 'user', 'pass', 'your_db');
    mysqli_set_charset($conn, 'utf8mb4');
    

3. 执行正确排序

数据修复后,直接使用以下语句即可得到符合丹麦语规则的排序结果:

SELECT * FROM your_postcode_table ORDER BY city ASC;

若需临时指定排序规则(比如字段默认规则不是丹麦语),可使用:

SELECT * FROM your_postcode_table ORDER BY city COLLATE utf8mb4_danish_ci ASC;

内容的提问来源于stack exchange,提问作者Jeppe Donslund

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 04:37:13