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

MariaDB含扩展字符的SELECT查询无结果,编码问题求助

解决utf8网站与utf8mb4数据库的LIKE查询匹配问题
  • 强制设置数据库连接字符集为utf8mb4
    网站编码是utf8,但数据库用的是utf8mb4,必须让PHP和数据库的连接字符集统一为utf8mb4,否则查询语句里的扩展字符会因为编码转换不匹配导致匹配失败。

    • PDO连接示例:
      // 方式一:在DSN中指定字符集
      $dsn = 'mysql:host=localhost;dbname=你的数据库名;charset=utf8mb4';
      $cn = new PDO($dsn, '用户名', '密码');
      
      // 方式二:连接后执行SQL设置
      $cn->exec("SET NAMES utf8mb4");
      
    • mysqli连接示例:
      mysqli_set_charset($cn, 'utf8mb4');
      
  • 确认PHP文件编码与字符串一致性
    确保你的PHP代码文件本身是以UTF-8(无BOM)格式保存的,这样代码里的'máchtig'字符串才是正确的UTF-8编码,避免因文件编码问题导致字符发送到数据库时乱码。不要手动调用utf8_encode或utf8_decode这类函数,反而会破坏原有编码。

  • 检查并修正字段的排序规则
    数据表informatie的对应字段必须使用utf8mb4系列的排序规则,否则字符比较逻辑会和连接字符集不匹配。

    1. 先查看当前字段的设置:
      SHOW CREATE TABLE informatie;
      
    2. 如果排序规则不是utf8mb4开头的,执行修改语句:
      ALTER TABLE informatie MODIFY COLUMN informatie TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
      

    (注:根据字段实际类型调整TEXT,比如是VARCHAR就改成VARCHAR(255))

  • 改用预处理语句(推荐)
    直接拼接字符串到SQL不仅有注入风险,还可能因编码处理不当导致匹配问题。用预处理语句能让数据库自动处理字符匹配逻辑:

    $stmt = $cn->prepare("SELECT * FROM informatie WHERE informatie LIKE ?");
    $searchKeyword = '%máchtig%';
    $stmt->execute([$searchKeyword]);
    $resultRows = $stmt->fetchAll(PDO::FETCH_ASSOC);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 04:45:21