问题出现在执行同步数据脚本的时候,脚本终止,并提示 laravel SQLSTATE[HY000]: General error: 1366 Incorrect string value

分析原因,发现终端上显示字符串乱码问题,然后排查数据库字符集,数据表字段设置情况。由于当前脚本执行的是将 A 数据表数据插入到 B 数据表中,代码操作是 Model::Create($attributes)

然后检查 Model 类是否存在当前 fillable 字段的属性修改器,结果发现问题了

1
2
3
4
5
6
<?php
public function setFieldAttribute($value)
{
    $this->attributes['field'] = strtoupper($value);
}

于是修改将内置转换大小的函数 strtoupper 替换为 `mb_strtoupper 问题得到了解决

PHP 涉及到字符串操作的时候,优先想到字符编码问题,优先使用 mb_* 函数代替 * 函数,包括涉及到计算字符串长度,处理文本文件替换等问题时