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

Laravel 9存储手机号报错:SQLSTATE[22003]数值越界如何解决?

问题原因与解决方案

问题根源

  • 字段类型范围不足:MySQL中integer类型的最大值为2147483647(仅10位数字),你生成的手机号是091(3位)加10位随机字符,总长度13位,远超出integer的存储范围,直接触发数值溢出报错。
  • 手机号不适合用数值类型存储:手机号本质是字符串标识,并非用于计算的数值,用integer存储会丢失前导零,同时无法兼容带国际区号的手机号格式。

解决步骤

  1. 修改数据库字段类型为字符串
    • 若未执行迁移,直接修改原迁移文件:
      $table->string('usr_mobile_phone', 15); // 15位长度足够覆盖绝大多数手机号格式
      
    • 若已执行迁移,创建新迁移修改字段:
      执行命令生成迁移文件:
      php artisan make:migration modify_usr_mobile_phone_in_users_table
      
      编辑新迁移文件:
      use Illuminate\Database\Migrations\Migration;
      use Illuminate\Database\Schema\Blueprint;
      use Illuminate\Support\Facades\Schema;
      
      return new class extends Migration
      {
          public function up()
          {
              Schema::table('users', function (Blueprint $table) {
                  $table->string('usr_mobile_phone', 15)->change();
              });
          }
      
          public function down()
          {
              Schema::table('users', function (Blueprint $table) {
                  $table->integer('usr_mobile_phone')->change();
              });
          }
      };
      
      运行迁移使修改生效:
      php artisan migrate
      
  2. 填充器代码无需修改
    字段改为字符串类型后,原填充器生成的带前导零的手机号字符串可直接存储,不会丢失格式或出现溢出问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 22:15:29