建SQL表时身份证号码的数据类型最好选什么?

landry1234 2009-04-26 04:56:01
我选过int型结果溢出,选char和vchar显示“值对于 Int32 太大或太小”,不知该选什么类型好
...全文
6939 37 打赏 收藏 转发到动态 举报
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
ming_love_java 2010-11-20
  • 打赏
  • 举报
回复
varchar(20)
注册失败 2009-04-27
  • 打赏
  • 举报
回复
[Quote=引用 35 楼 patrickpan 的回复:]
身份证号码用:0-9九个数值 + X符号表示,有必要用nvarchar吗?

varchar:可变长度,存储ANSI字符,根据数据长度自动变化。
nvarchar:可变长度,存储Unicode字符,根据数据长度自动变化。

ANSI主要是以单字节来存储数据,一般适合英文。而我们常用的汉字需要用两个字节来存储,所以就要使用unicode的数据类型,不然读取出来的数据可能会乱码。

[/Quote]

顶这个
patrickpan 2009-04-27
  • 打赏
  • 举报
回复
身份证号码用:0-9九个数值 + X符号表示,有必要用nvarchar吗?

varchar:可变长度,存储ANSI字符,根据数据长度自动变化。
nvarchar:可变长度,存储Unicode字符,根据数据长度自动变化。

ANSI主要是以单字节来存储数据,一般适合英文。而我们常用的汉字需要用两个字节来存储,所以就要使用unicode的数据类型,不然读取出来的数据可能会乱码。
patrickpan 2009-04-27
  • 打赏
  • 举报
回复
用varchar(20)
说用nvarchar(20)的同学面壁去!!!!!!!
至于什么原因,自己去查吧。
Kao,用nvarchar(20)的还真不少!!!!!!

你建两个表,一个用varchar(20),一个用nvarchar(20),插入1000条身份证数据,看哪种占用的存储空间多!
junyi2003 2009-04-27
  • 打赏
  • 举报
回复
明显是nvarchar 或者 varchar (20)

怎么可能定义为INT
sy_binbin 2009-04-27
  • 打赏
  • 举报
回复
nvarchar(20)
zgke 2009-04-27
  • 打赏
  • 举报
回复
nvarchar(20) 因为身份证数字最后以为可能会出10 显示为X

  • 打赏
  • 举报
回复
Mark..................
llsen 2009-04-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 kkun_3yue3 的回复:]
nvarchar(20)
[/Quote]

Up
wwwojc 2009-04-27
  • 打赏
  • 举报
回复
varchar(20)
wartim 2009-04-27
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 snakegod 的回复:]
引用 22 楼 yanm7788 的回复:
NVARCHAR(20)

还是多考虑考虑性能吧 不然永远是菜鸟
每个字段后加个0, 太不负责任了吧。
其实应该严格定义数据字典,数据字典和数据库由专人负责(一般是项目负责人或者dba),程序员不允许擅自建表和存储过程才对,擅自修改也不行。
数据库访问权限和dba权限用户分开。
[/Quote]

理论上是对的,头几年,我是能varchar(8)就不varchar(10),现在吧主要精力花在业务逻辑上去了,看来我老了,唉,要靠你们年轻人了
李世垚 2009-04-27
  • 打赏
  • 举报
回复
汗 引用错了
我要引用的是这段:
引用 20 楼 zhnzzy 的回复:
引用 17 楼 wartim 的回复:
我现在
小玩玩尚可

大玩玩亦可,跟net、linq一样,当性能不是问题的时候永远不是问题,通用性和扩展性,不容易出错才是最重要的,何况varchar又不是一开始就会分配这么多空间的,我一个某行业开发通用开发平台就是这么干的,当模块有几十个时,省去不少检查和排错的时间,性能也没损失多少,每个字段精益求精,很容易让团队里的菜鸟看蒙漏改程序出错,还不如告诉他们只要在默认的varchar,50后面加一个0,傻瓜都不会出错,并不能要求所有人都仔细,让他们和自己在这些细节上精力集中、浪费时间还不如去多想想逻辑,干脆标准化,规范化,除非是要求比较特别的项目
李世垚 2009-04-27
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 yanm7788 的回复:]
NVARCHAR(20)
[/Quote]
还是多考虑考虑性能吧 不然永远是菜鸟
每个字段后加个0, 太不负责任了吧。
其实应该严格定义数据字典,数据字典和数据库由专人负责(一般是项目负责人或者dba),程序员不允许擅自建表和存储过程才对,擅自修改也不行。
数据库访问权限和dba权限用户分开。
Tensionli 2009-04-27
  • 打赏
  • 举报
回复
NVARCHAR(20)还是比较合理的
wartim 2009-04-27
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 zhnzzy 的回复:]
引用 17 楼 wartim 的回复:
我现在
小玩玩尚可[/Quote]

大玩玩亦可,跟net、linq一样,当性能不是问题的时候永远不是问题,通用性和扩展性,不容易出错才是最重要的,何况varchar又不是一开始就会分配这么多空间的,我一个某行业开发通用开发平台就是这么干的,当模块有几十个时,省去不少检查和排错的时间,性能也没损失多少,每个字段精益求精,很容易让团队里的菜鸟看蒙漏改程序出错,还不如告诉他们只要在默认的varchar,50后面加一个0,傻瓜都不会出错,并不能要求所有人都仔细,让他们和自己在这些细节上精力集中、浪费时间还不如去多想想逻辑,干脆标准化,规范化,除非是要求比较特别的项目
yanm7788 2009-04-27
  • 打赏
  • 举报
回复
NVARCHAR(20)
zhnzzy 2009-04-27
  • 打赏
  • 举报
回复
NVARCHAR(20)可以,预留多一点点空间没坏处,
zhnzzy 2009-04-27
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 wartim 的回复:]
我现在
凡是字符串字段都是 varchar(500)
凡是备注字段都是 varchar(5000)
凡是图片字段都是 image
凡是整型字段都是 int
凡是带小数字段都是 float
凡是日期时间字段都是 datetime
凡是布尔字段都是 int
凡是表都只有一个固定名称为ID的varchar(500),默认值 NewGUID()的主键

什么输入截断字符串、Text不能作为连接索引、dec小数位数设置。。都和我无关,不会发生,懒得老去关心
[/Quote]
小玩玩尚可
dengyun_1223 2009-04-27
  • 打赏
  • 举报
回复
up
wartim 2009-04-27
  • 打赏
  • 举报
回复
sql 那个自动填从guid的列类型不如varchar +默认值newguid()好用,而且类型统一,看着舒服
加载更多回复(17)

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧