MariaDB存储法语重音字符显示为问号的技术求助
解决MariaDB存储法语重音字符为问号的问题
检查CSV文件编码
确认CSV文件本身是UTF-8编码(建议无BOM格式),可通过Notepad++等工具查看并转换编码。如果文件是ISO-8859-1等其他编码,读取时需转码为UTF-8,例如:$content = file_get_contents('your_file.csv'); $content = mb_convert_encoding($content, 'UTF-8', 'ISO-8859-1');优化数据库连接的字符集设置
不要仅依赖set names utf8mb4,建议在PDO连接时直接指定字符集参数,确保连接层与数据库字符集完全匹配:$dbConn = new PDO( "mysql:host=localhost;dbname=your_database;charset=utf8mb4", $username, $password, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION] );若使用mysqli扩展,改用
mysqli_set_charset($dbConn, 'utf8mb4')替代执行set names语句,该方法会同步连接的内部字符集状态,比手动执行SQL更可靠。配置MariaDB全局字符集
检查MariaDB的配置文件(my.cnf或my.ini),确保全局字符集设置为utf8mb4:[mysqld] character-set-server = utf8mb4 collation-server = utf8mb4_general_ci [client] default-character-set = utf8mb4修改后重启MariaDB服务,避免会话级设置被全局配置覆盖。
确保CSV读取时的编码一致性
使用fgetcsv读取CSV时,若文件编码不确定,可对每一行数据做转码处理:$handle = fopen('your_file.csv', 'r'); while (($row = fgetcsv($handle, 1000, ',')) !== false) { $row = array_map(function($item) { return mb_convert_encoding($item, 'UTF-8', 'auto'); }, $row); // 执行数据库插入操作 } fclose($handle);排查数据流转环节
在插入数据库前,先输出PHP读取到的重音字符,确认字符在PHP层面显示正常。若PHP中已显示为问号,问题出在文件读取或转码环节,而非数据库配置。
内容的提问来源于stack exchange,提问作者Ravi Mota
相关产品推荐
相关产品推荐

