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

Laravel插入含£符号数据报MySQL 1366 Incorrect string value错误如何解决

问题根因

报错中的\xA3是Latin1(ISO-8859-1)编码下£符号的字节值,你只修改了字段的排序规则,但读取到的文件内容本身还是Latin1编码,和数据库字段要求的utf8mb4编码不匹配,所以仍然触发报错。

解决步骤
  • 第一步:转码读取到的文件内容
    在读取文件后、插入数据库前,将内容转换为UTF-8编码,代码示例:
$rawContent = Storage::disk('dropbox')->get('/file.txt');
// 从Latin1编码转成UTF-8编码
$record['contents'] = mb_convert_encoding($rawContent, 'UTF-8', 'ISO-8859-1');

如果不确定源文件编码,可以先自动检测再转码,兼容性更好:

$rawContent = Storage::disk('dropbox')->get('/file.txt');
$sourceEncoding = mb_detect_encoding($rawContent, ['UTF-8', 'ISO-8859-1', 'Windows-1252'], true);
$record['contents'] = mb_convert_encoding($rawContent, 'UTF-8', $sourceEncoding);

如果转码后仍有符号异常,可以把源编码指定为Windows-1252再试,它是Latin1的超集,绝大多数Windows生成的txt文件都是这个编码

  • 第二步:确认Laravel数据库配置
    检查config/database.php中的MySQL连接配置,确保编码和排序规则已经适配utf8mb4:
'mysql' => [
    // 其余配置保持不变
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_general_ci',
],

修改后执行php artisan config:clear清空配置缓存生效。

  • 第三步:(可选)修改表默认编码
    如果只改了单个字段的编码,表本身的默认编码还是Latin1的话,后续新增字段会默认继承Latin1编码,建议同步修改表的默认编码:
ALTER TABLE 你的表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 08:27:03