数据库中的密码和移动类型

时间:2013-01-17 13:08:52

标签: database database-design

我有“客户”表:

CREATE TABLE Customer
(
    ID INTEGER NOT NULL DEFAULT 0,
    Username CHAR(50) NOT NULL,
    Password CHAR(100) NOT NULL,
    LastName CHAR(20) NOT NULL,
    PhoneNumber BIGINT NOT NULL,
    MobileNumber BIGINT NOT NULL,
    PRIMARY KEY (ID)
) 
;

我使用char作为密码类型,这是对的吗?对于我使用bigint的手机号码,这是对的吗?如果不是我该怎么办?什么是它的SQL语句?感谢。

3 个答案:

答案 0 :(得分:1)

由于这些字段都是可变长度,所以你一定要使用VARCHAR而不是CHAR来代表'用户名','密码'和& '姓'。如果您对这些长度有限制,那么您始终可以将VARCHAR类型限制为该限制。

至于'PhoneNumber'& 'MobileNumber',您将不会使用这些值执行任何计算,因此没有理由不将它们存储为VARCHAR,更不用说电话号码通常包含0作为第一个字符,不能存储为任何INT的INT样。

类似的东西:

CREATE TABLE `Customer` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `Username` varchar(255) NOT NULL DEFAULT '',
 `Password` varchar(255) NOT NULL DEFAULT '',
 `LastName` varchar(255) NOT NULL DEFAULT '',
 `PhoneNumber` varchar(100) DEFAULT NULL,
 `MobileNumber` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

答案 1 :(得分:0)

所有这些问题都与您的要求有关......例如

如果此字段中只有数字,您可以BIGINT使用MobileNumber
如果其中也可能包含字符,您将使用VARCHAR

VARCHARCHAR都有各自的优缺点 使用VARCHAR可让您自由地在一个字符串中包含任意数量的字符,

例如VARCHAR(30)最多可存储30个字符,如果字符数较少在其中,然后自动转储剩余内存。您也可以使用VARCHAR(max)来实现此目的,它将使用所有传递的字符,然后转储剩余的内存
CHAR(30)也会存储30个字符,但它不会处理内存。

在较小的程序中,内存可能不是问题,但如果程序很大,它可能会产生重大影响。

答案 2 :(得分:0)

对于密码,请使用字节数组 1 并存储密码的单向哈希。当验证用户输入的密码时,请对其进行散列并将其与存储的散列进行比较。

除此之外,您还应该使用salting和(理想情况下)将整个身份验证基础架构与防火墙和定义良好的API之外的自己的服务器分开。

相关答案:


Oracle中的

1 RAW,PostgreSQL中的bytea,MS SQL Server中的varbinary,MySQL等中的BLOB ......