为了提高系统的速度,我准备将系统中的字符串转换成数字。
这样可以提高字符串的比对效率。比如用户登录的时候账号,密码对比的速度。
我现在写了一个算法将admin进行加密,得到一个32位的整数:55655355655365555251565752654869
我写的函数可以将任意一串长度的字符串转换成32位的整数。但是现在关键是这个32位的整数怎样可以存到数据库中?我试过好多类型都不行,float型可以。还有其他的类型可以么?

解决方案 »

  1.   

    转换成2进制可以
    cast as varbinary
      

  2.   

    使用 bigint 数据类型存储从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 范围内的数字。存储大小为 8 个字节。貌似不够。还是用字符串吧。
      

  3.   

    你再看看这个行不?
    decimal 和 numeric
    带定点精度和小数位数的 numeric 数据类型。decimal[(p[, s])] 和 numeric[(p[, s])]定点精度和小数位数。使用最大精度时,有效值从 - 10^38 +1 到 10^38 - 1。decimal 的 SQL-92 同义词是 dec 和 dec(p, s)。p(精度)指定小数点左边和右边可以存储的十进制数字的最大个数。精度必须是从 1 到最大精度之间的值。最大精度为 38。s(小数位数)指定小数点右边可以存储的十进制数字的最大个数。小数位数必须是从 0 到 p 之间的值。默认小数位数是 0,因而 0 <= s <= p。最大存储大小基于精度而变化。精度 存储字节数 
    1 - 9 5 
    10-19 9 
    20-28 13 
    29-38 17 
      

  4.   

    试了下:行。
    create table tb(val decimal(32,0))insert into tb values(55655355655365555251565752654869)select * from tbdrop table tb/*
    val                                
    ---------------------------------- 
    55655355655365555251565752654869(所影响的行数为 1 行)
    */
      

  5.   

    报告帅哥,你这样不行,我试了。而且设置到最大都没用。numeric(38, 0)
      

  6.   

    这样可以哦,不知道为什么只能用Sql语句查询,直接打开表看会显示无法读取数据。
      

  7.   

    我知道了,这是该死的SQL SERVER企业管理器有问题。我用的sql server 2008,貌似它里面用的数据类型不支持那么长的,所以才显示无法读取数据。
      

  8.   

    我知道为什么了,应该是企业管理器在写的时候没有考虑到跟SQL SERVER的数据类型兼容,企业管理器的用的数据类型比SQL SERVER的小,所以会数据溢出。就提示无法获取。你看这里理解合理吧?
      

  9.   

    其实刚刚我老早就试了decimal和numeric,只是自己太懒了,没去写SQL语句插入也没仔细看企业管理器给的错误提示。害得我忙了这么久。看来不能太相信微软的东西。哈哈。