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

MySQL Workbench主键自动插入127问题排查求助

主键字段强制插入127的问题排查与解决

问题现象

开发基于PHP+MySQL的注册系统,首次测试正常后,无论通过PHP程序还是MySQL Workbench插入数据,主键matricula字段都会被插入127(此前测试用的随机数)。已尝试重启XAMPP、更换MySQL80服务器、重启电脑,问题仍存在。

相关代码与环境信息

PHP插入代码

<?php
// 接收cadastro.html的数据
require_once("conexao.php");

$matricula = $_POST['inputMatricula'];
$nome = $_POST['inputNome'];
$email = $_POST['inputEmail'];
$senha = $_POST['inputSenha'];
$login = $_POST['inputLogin'];

echo $matricula;

// 插入数据到数据库
$result = $conn->query("INSERT INTO usuario 
    VALUES ('{$matricula}', 'Informática', 'Vespertino', '{$nome}', '{$email}', '{$senha}', '{$login}')");

数据表结构

usuario表结构

测试用SQL语句与结果

插入命令:

INSERT INTO usuario 
    VALUES (1234567890123456, 'Informática', 'Vespertino', 'nome', 'email', 'senha', 'login');

查询结果:
插入后查询结果

问题原因

从表结构截图可见,matricula字段的类型是TINYINT,而TINYINT的取值范围为**-128到127**。你插入的数值1234567890123456远超出该范围,MySQL会自动将其截断为该类型的最大值127,这就是所有插入操作都会得到127的原因。

解决步骤

  1. 修改字段数据类型:将matricula字段类型替换为合适的类型,比如VARCHAR(16)(学号类标识用字符串存储可避免数值溢出、前导零丢失问题),或BIGINT(若必须用数值类型,BIGINT支持更大取值范围)。执行以下SQL语句修改:
    -- 改用字符串类型(推荐)
    ALTER TABLE usuario MODIFY COLUMN matricula VARCHAR(16) PRIMARY KEY;
    -- 或改用数值类型
    -- ALTER TABLE usuario MODIFY COLUMN matricula BIGINT PRIMARY KEY;
    
  2. 验证修改效果:重新执行插入测试语句,检查主键字段是否正确插入指定值。
  3. 优化插入语句(可选):插入数据时显式指定字段列表,避免因表结构变更导致字段顺序错误,示例:
    INSERT INTO usuario (matricula, curso, turno, nome, email, senha, login)
    VALUES ('1234567890123456', 'Informática', 'Vespertino', 'nome', 'email', 'senha', 'login');
    

内容的提问来源于stack exchange,提问作者Victor Hugo Santos de Moraes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 06:51:18