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}')");
数据表结构

测试用SQL语句与结果
插入命令:
INSERT INTO usuario VALUES (1234567890123456, 'Informática', 'Vespertino', 'nome', 'email', 'senha', 'login');
查询结果:
问题原因
从表结构截图可见,matricula字段的类型是TINYINT,而TINYINT的取值范围为**-128到127**。你插入的数值1234567890123456远超出该范围,MySQL会自动将其截断为该类型的最大值127,这就是所有插入操作都会得到127的原因。
解决步骤
- 修改字段数据类型:将
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; - 验证修改效果:重新执行插入测试语句,检查主键字段是否正确插入指定值。
- 优化插入语句(可选):插入数据时显式指定字段列表,避免因表结构变更导致字段顺序错误,示例:
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
相关产品推荐
相关产品推荐

