【问题标题】:MySQL datatypes not changing in PHPMyAdmin...?PHPMyAdmin 中的 MySQL 数据类型没有改变...?
【发布时间】:2012-04-07 17:16:36
【问题描述】:

好的,我正在做一个 php 大学项目,我必须让学生注册,提交他们的详细信息——名字、姓氏、电话号码、身份证号码等。

起初我使用 int 作为 id 编号,但我不打算用它做任何数学运算,所以我将其更改为 varchar,但是在此更改之后,我提交的所有示例仍然具有最大 int 值“2147483647 " 当我将它指定为 varchar 时,为什么会发生这种情况以及如何解决它。

如果有帮助,表字段的排序规则都是 latin1_swedish_ci。 我不是 MySQL 专家,所以如果您需要任何其他信息来了解这个问题的根源,请尽管询问。

编辑:我还将字段的值改回 bigint,它仍然在表中抛出 2147483647,即使我输入了 8888888888888(13 个字符),所以使用 varchar 或 bigint 我仍然得到 2147483647,我做错了什么?

更新:尝试更改字段的最大值时,我从 phpmyadmin 收到以下错误。

  SQL query:

ALTER TABLE  `student` CHANGE  `idno`  `idno` BIGINT( 99999999999999 ) NOT NULL

MySQL said: 

#1439 - Display width out of range for column 'idno' (max = 4294967295) 

更新:取出 intval() 解决了这个问题

 $id_number=intval($_POST['id_number']);
 $id_number=($_POST['id_number']);

【问题讨论】:

  • 如果是数字类型,则保留为 int/bigint。仅仅因为您没有对值进行“数学运算”并不意味着您应该放弃将其保留为 int 的所有其他内容。你是如何做到这个“改变”的? alter table?
  • 另外我没有教授的数据库结构的转储,所以 php 应用程序应该是可移植的,他只是要将我的代码连接到他的数据库。
  • 在 phpmyadmin 中,我只是在结构菜单下更改了字段的数据类型。
  • 可能在PHP代码中,ID的类型是bigint。
  • 在存储数值时更改数据类型会影响排序的执行方式。正如其他人所提到的,VARCHAR(4+) 比 INT 占用更多的字节——更多的字节意味着在加入/搜索/等时更慢。最重要的是,使用正确的数据类型存储数据——如果你不在列中存储字母字符,请不要使用字母/字母数字数据类型——没有内在的验证。

标签: php mysql


【解决方案1】:

除非您确实需要在 ID (PK?) 字段中使用字母,否则不要使用 varchar 作为 ID。使用整数更快。也许 PHP 脚本正在尝试将 DB 的 varchar 更改为整数,因此将 ID 更改回 int

你真的需要bigint吗?未签名的int 可能绰绰有余。 http://dev.mysql.com/doc/refman/5.0/en/integer-types.html

更新:如果您需要确保该值是整数,您应该检查它的数据类型。

if(is_int($my_value)){
  //do the script
}
  else{
    //echo error message
  }

如果值来自 DB(数据类型为整数的列),一切都应该没问题,但检查一下不会有什么坏处...

【讨论】:

  • 好吧,我刚刚用gettype()检查了类型,php中的类型是整数,字段的类型是varchar,但是表中的值还是2147483647?
  • @grasshopper 将 DB 数据类型更改为整数,并在必要时重置自动增量。 (如果我理解正确,您在 DB 中拥有最大的 int 值。)
  • 你说得对,我的 php 代码中有这个 $id_number=intval($_POST['id_number']);我猜是 intval 函数导致了问题——因为我把它拿出来后一切正常
  • @grasshopper 很高兴知道一切正常。同样,如果我理解正确,您使用intval() 来验证用户提交的号码。不应该这样做,因为它返回一个值,它不会验证它(传递正确的值,将错误的值标记为false)。检查即 PHP 的过滤器函数以验证值:php.net/manual/en/book.filter.php
猜你喜欢
  • 2023-03-29
  • 2016-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-23
  • 1970-01-01
  • 2015-02-17
  • 2021-09-05
相关资源
最近更新 更多