好的,我现在完全糊涂了。
我在javascript中有一个应用程序,它将一个信息数组发送到一个php脚本,然后将其保存到一个mysql数据库。
该信息包含一个8到20个字符的唯一编号,用作mysql唯一索引以及所有这些编号,并且编号从1分配给每个唯一编号。
当我发送 1066998880 时,通过检查该行是否存在,然后在其得分中加1来完美运行。
但是当我发送 100005075040249 时,它会以 2147483647 的形式保存到mysql数据库并返回 2146483647的重复。
不确定我做错了什么。但是我的代码是:
JAVASCRIPT
$.ajax({ url: 'URL',
data: { Unique_ID: Unique_ID, first: first, last: last, email: email},
type: 'post',
success: function(output) { 'functions'};
PHP
$Unique_ID = $_POST["Unique_ID"];
$first = $_POST["first"];
$last = $_POST["last"];
$email = $_POST["email"];
$count = 1;
// Connect to server and select database.
$connection = mysql_connect("$host", "$username", "$password") or die(mysql_error());
$sql = "SELECT * FROM `comfort_lavender`.`Players` WHERE Unique_ID = '$Unique_ID'";
$result = mysql_query($sql);
if(mysql_num_rows($result) > 0){
//found
mysql_query("UPDATE `comfort_lavender`.`Players` SET `count` = `count`+1 WHERE Unique_ID= '$Unique_ID'");
$score = mysql_query("SELECT count FROM `comfort_lavender`.`Players` WHERE `Unique_ID` = '$Unique_ID'");
$got = mysql_fetch_array( $score );
echo $got['count'];
}else{
//not found
mysql_query("INSERT INTO `comfort_lavender`.`Players` (`Unique_ID`, `first`, `last`, `email`, `count`) VALUES ('$Unique_ID', '$first', '$last', '$email', '1');") or die(mysql_error());
echo 1;
};
答案 0 :(得分:2)
最简单的答案是,您的列的数据类型为SIGNED INT
,最大值为2147483647
。
您正在插入一个值,该值大于将值截断为最大允许值的范围。这有两种可能的数据类型,
一个是VARCHAR(18)
,它会将您的数据类型更改为字符串。
,另一个是BIGINT
,可以容纳:
签名BIGINT -9223372036854775808 to 9223372036854775807
对于UNSIGNED BIGINT 0 to 18446744073709551615
答案 1 :(得分:1)
2,147,483,647是INT(4字节整数)可以存储在MySQL中的最大值。
将数据类型更改为BIGINT(8字节整数)(最多可存储值9,223,372,036,854,775,807)。
答案 2 :(得分:0)
根据数据库中使用的数据类型和服务器的32/64位版本,整数具有特定限制。
解决方法可能是在PHP中使用字符串,在SQL中使用BIGINT。