mysql - #1265 - 列 MYSQL 5.7 的数据被截断

标签 mysql

在我将我的服务器升级到 PHP7 和 MySQL 5.7 之后,我收到一个错误查询:

UPDATE user SET user_rank_points = (@i := (@i + 1))

错误是:#1265 - 第 1 行“user_rank_points”列的数据被截断

有人有解决办法吗?

最佳答案

随着人们升级到 MySQL 5.7,这类问题将会出现很多。此版本的 MySQL 使严格 SQL 模式成为默认模式,这与早期版本中严格模式是一个选项不同。

在没有严格模式的情况下,当您尝试将 32768 之类的值存储到 SMALLINT 中时,它会默默地将该值截断为 32767,这是您可以存储的最大值一个带符号的 16 位整数。

您是否希望 MySQL 更改您尝试存储的数据?如果是这样,您可以更改 sql_mode 以删除严格模式,所有超过 215-1 的值都将被截断为该值。在此处了解如何执行此操作:http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html

或者您更喜欢它存储更大的整数值?如果是这样,请将您的列更改为 INT

或者当您的 @i 超过 215-1 时,您更喜欢它引发错误?如果是这样,这就是它现在的行为。


回复你的评论:

首先,INT(11)INT(2)INT(327) 没有任何不同。 number 参数只是显示宽度的提示,它与 INT 将存储的位数无关。请参阅我对 Types in MySQL: BigInt(20) vs Int(20) 的回答

您说在将列类型更改为 INT 后您仍然遇到相同的错误。 @i 的值是多少?收到错误后运行此查询:

SELECT @i;

关于mysql - #1265 - 列 MYSQL 5.7 的数据被截断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39351616/

相关文章:

php - Cakephp加入查询属于

php - 更新 php 脚本中的重复键

c# - 找不到 MySql 库

php - AJAX 根据 <option> 值更新 MySQL 查询

mysql - 我可以设置过滤的星型数据库复制吗?

php在Mysql中序列化数据

mysql - Zend Framework 2 中的数据库架构

mysql - 如何忽略MySQL中的重复值?

mysql - 在同一台服务器上运行 MySQL 和 PostgreSQL

mysql - 远程phpmyadmin无法登录但mysql客户端可以