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

Datatables含重音字符行报错问题求助

解决PDO下带重音字符的表格加载/搜索报错问题

1. 确认数据库、表及字段的字符集配置

先确保存储层面的编码统一为utf8mb4,且排序规则采用支持重音字符的utf8mb4_unicode_ci:

  • 执行以下SQL验证当前配置:
-- 检查数据库字符集
SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '你的数据库名';

-- 检查表字符集
SELECT CCSA.character_set_name FROM information_schema.`TABLES` T, information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` CCSA 
WHERE CCSA.collation_name = T.table_collation AND T.table_schema = '你的数据库名' AND T.table_name = '你的表名';

-- 检查字段字符集
SELECT character_set_name FROM INFORMATION_SCHEMA.COLUMNS 
WHERE table_schema = '你的数据库名' AND table_name = '你的表名' AND column_name = '客户字段名';
  • 若结果不符合要求,执行修改语句:
ALTER DATABASE 你的数据库名 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE 你的表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE 你的表名 MODIFY COLUMN 客户字段名 VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

2. 优化PDO连接配置

  • 给PDO的DSN添加排序规则参数,确保连接层面编码对齐:
$db = new PDO("mysql:host=".DBHOST.";charset=utf8mb4;collation=utf8mb4_unicode_ci;dbname=".DBNAME, DBUSER, DBPASS);
  • 开启异常错误模式,方便定位具体报错:
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

3. 规范搜索查询写法

搜索带重音字符的内容时,必须使用参数化查询,禁止手动拼接SQL,避免编码转义错误:

// 示例:搜索客户字段
$searchTerm = $_GET['search'];
$stmt = $db->prepare("SELECT * FROM 客户表 WHERE 客户字段 LIKE CONCAT('%', :term, '%')");
$stmt->bindParam(':term', $searchTerm, PDO::PARAM_STR);
$stmt->execute();
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);

4. 确保页面输出编码一致

  • 在HTML头部设置编码:
<meta charset="UTF-8">
  • 若用PHP直接输出内容,在输出前设置响应头:
header('Content-Type: text/html; charset=utf-8');

5. 清理脏数据与缓存

  • 若之前用错误编码插入过数据,重新插入带重音字符的测试数据,确保存储的是正确的utf8mb4编码内容;
  • 清理浏览器缓存,避免旧编码缓存影响显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 19:40:34