我在mysql中有这个表:
CREATE TABLE `user_cards` (`id` int(11) NOT NULL,`card_number` bigint(20) NOT NULL,`card_cvv` int(2) NOT NULL,`card_expiration` date NOT NULL,`card_company` varchar(100) NOT NULL,`created_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP)
当我尝试在card_number
或card_cvv
中插入以0开头的数字时,例如 0048 ,默认情况下,mysql似乎删除了前两个零(仅记录值 48 )
在我的情况下,我将有以零开头的记录,有没有办法解决这个问题?
答案 0 :(得分:2)
对于这样的事情,最好存储为CHAR(16)
。你知道它的长度是16位,这实际上是以字节而不是数字存储值。在另一端,它作为一个字符串返回,但你实际上想要一个返回的字符串,使用零和全部。数字永远不会添加前导零。
CREATE TABLE `user_cards` (
`id` int(11) NOT NULL,
`card_number` char(16) NOT NULL,
`card_cvv` char(4) NOT NULL,
`card_expiration` date NOT NULL,
`card_company` varchar(100) NOT NULL,
`created_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
我应该注意,如果您实际存储信用卡数据,则应 从不 执行此操作。信用卡数据不应存储在数据库中:数据泄露的发生方式,如果您认为可能不会发生, 您错了 < / strong>即可。使用外部网站获取信用卡或使用提供令牌的第三方API代替。