字符串存入数据库之前该如何的处理(进者有分)
两个方面,一个是数据库字段类型应该使用varchar还是nvarchar, 以前使用varchar,但是判断中文和字母数字的混合字符串的长度很麻烦,后来使用nvarchar,中文和字母数字都算作一个字符,计算长度倒是方便了。 可是,使用varchar和nvarchar到底有什么不同?需不需要使用nvarchar呢?
另一个,字符串在存入数据库之前要做一些编码的处理,比如把空格变为 把<、>、双引号、单引号替换掉,把\r\n替换为<br>,这样操作后,字符串的长度就变得比原来长很多,如果要求用户输入100字以内,那么表里的字段就要定义为600的长度,这样做使得字段都变得很长。
以上两个问题一直困扰着我,不知道大家在这方面都是怎么处理的?一起讨论一下吧。
问题点数:100、回复次数:20Top
1 楼gngnandgngn(仗义执言 )回复于 2006-03-10 09:02:55 得分 6
1。 就使用varchar, 把中文记做两个字符,这是正规做法。
2。 我觉得并不需要转换啊Top
2 楼Snowdust(雪尘)回复于 2006-03-10 09:05:40 得分 6
1.varchar就行了
"1234"这样的字符串用nvarchar要占用8个字节,而且varchar只占用4个字节。
2.你可以保存没有转换的字符串,例如" \r\n<>'",显示的时候转换一下就可以了。Top
3 楼drk928(一起看斜阳)回复于 2006-03-10 09:11:30 得分 6
你如果想保留格式定义性的东西那也只能这样了.Top
4 楼cuike519(I will be back!)回复于 2006-03-10 09:12:27 得分 6
1、Nvarchar是变长的Unicode。varchar是变长的non-Unicode.在处理多语言信息的时候一定要使用nvarchar。
2、对于一般包括空格或者其他格式字符的字段,使用nvarchar并给足够的长度,nvarchar最长支持4000个字符,或者使用ntext类型保存这些信息。Top
5 楼xiaogueizi(寻寻觅觅、冷冷清清、凄凄惨惨戚戚!)回复于 2006-03-10 09:13:33 得分 6
1:varchar就行了吧~~~~nvarchar是放unicode的,双字节的。
2:......Top
6 楼jiezhi(风满袖)回复于 2006-03-10 09:15:04 得分 6
建议使用nvarchar,而且在做国际化程序时是必须的.
Top
7 楼songxiaozhao(雨朋)回复于 2006-03-10 09:15:42 得分 6
1.nvchar
2.转化 安全第一Top
8 楼cow8063(天涯远不远?不远!人在天涯,天涯怎会远)回复于 2006-03-10 09:19:19 得分 6
nvarchar 多言语支持
2 我也觉得不需要转换Top
9 楼soldierB(eric)回复于 2006-03-10 09:21:49 得分 0
为什么不需要转换呢?
如果用户在多行文本框里输入
line1: fdj
line2: jfsd
如果不转换,输出就会变为line1: fdjline2:jfsd
另外,为了防止注入,也要把单引号等关键字替换掉
如果不转换,以上两种情况是怎么避免的呢?Top
10 楼HH80893070(.Net菜鸟)回复于 2006-03-10 09:31:15 得分 6
关注Top
11 楼nameone(过客)回复于 2006-03-10 09:34:39 得分 6
UPTop
12 楼soldierB(eric)回复于 2006-03-10 11:29:02 得分 0
ding
Top
13 楼lgnet(www.51bw.net)回复于 2006-03-10 11:53:46 得分 6
使用varchar,这样的字段可以节约空间,如果存储的内容没有varchar定义的字段长,那么多出来的部分决不占空间!Top
14 楼iuhxq(小灰)回复于 2006-03-10 12:00:33 得分 6
如果少量数据就用nvarchar吧,它与varchar的区别是长度不足的部分就空出来,而varchar不足的部分是用空格补上的
大量数据可以使用text字段Top
15 楼soldierB(eric)回复于 2006-03-13 17:50:02 得分 0
ding
Top
16 楼flashthunder(闪雷(人生有梦,筑梦能圆))回复于 2006-03-13 17:53:14 得分 6
mark一下Top
17 楼ahui9527(ahui)回复于 2006-03-13 19:29:36 得分 6
输出的时候要把\n之类的换成<br>就可以了,或者使用<pre>Top
18 楼blackhero(黑侠客)回复于 2006-03-13 19:32:13 得分 6
nvarcharTop
19 楼real_weboy(波→ONLINE)回复于 2006-03-13 19:43:50 得分 10
我一般是在输出的时候转换字符,而存入到数据库的时候不进行转换。如果怕SQL注入攻击,你可以使用存储过程或者参数化查询语句。显示在页面的时候再:
HttpUtility.HtmlEncode();
就OK了。Top
20 楼soldierB(eric)回复于 2006-03-13 22:45:02 得分 0
我觉得real_weboy(波→ONLINE)说得到是有点道理。。有否定的吗?Top




