【发布时间】: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 占用更多的字节——更多的字节意味着在加入/搜索/等时更慢。最重要的是,使用正确的数据类型存储数据——如果你不在列中存储字母字符,请不要使用字母/字母数字数据类型——没有内在的验证。