两个方面,一个是数据库字段类型应该使用varchar还是nvarchar, 以前使用varchar,但是判断中文和字母数字的混合字符串的长度很麻烦,后来使用nvarchar,中文和字母数字都算作一个字符,计算长度倒是方便了。 可是,使用varchar和nvarchar到底有什么不同?需不需要使用nvarchar呢?另一个,字符串在存入数据库之前要做一些编码的处理,比如把空格变为&nbsp;把<、>、双引号、单引号替换掉,把\r\n替换为<br>,这样操作后,字符串的长度就变得比原来长很多,如果要求用户输入100字以内,那么表里的字段就要定义为600的长度,这样做使得字段都变得很长。以上两个问题一直困扰着我,不知道大家在这方面都是怎么处理的?一起讨论一下吧。

解决方案 »

  1.   

    1。 就使用varchar, 把中文记做两个字符,这是正规做法。
    2。 我觉得并不需要转换啊
      

  2.   

    1.varchar就行了
      "1234"这样的字符串用nvarchar要占用8个字节,而且varchar只占用4个字节。
    2.你可以保存没有转换的字符串,例如" \r\n<>'",显示的时候转换一下就可以了。
      

  3.   

    1、Nvarchar是变长的Unicode。varchar是变长的non-Unicode.在处理多语言信息的时候一定要使用nvarchar。
    2、对于一般包括空格或者其他格式字符的字段,使用nvarchar并给足够的长度,nvarchar最长支持4000个字符,或者使用ntext类型保存这些信息。
      

  4.   

    1:varchar就行了吧~~~~nvarchar是放unicode的,双字节的。
    2:......
      

  5.   

    建议使用nvarchar,而且在做国际化程序时是必须的.
      

  6.   

    1.nvchar
    2.转化 安全第一
      

  7.   

    nvarchar 多言语支持
    2 我也觉得不需要转换
      

  8.   

    为什么不需要转换呢?如果用户在多行文本框里输入line1: fdj  
    line2: jfsd如果不转换,输出就会变为line1: fdjline2:jfsd另外,为了防止注入,也要把单引号等关键字替换掉如果不转换,以上两种情况是怎么避免的呢?
      

  9.   

    使用varchar,这样的字段可以节约空间,如果存储的内容没有varchar定义的字段长,那么多出来的部分决不占空间!
      

  10.   

    如果少量数据就用nvarchar吧,它与varchar的区别是长度不足的部分就空出来,而varchar不足的部分是用空格补上的大量数据可以使用text字段
      

  11.   

    输出的时候要把\n之类的换成<br>就可以了,或者使用<pre>
      

  12.   

    我一般是在输出的时候转换字符,而存入到数据库的时候不进行转换。如果怕SQL注入攻击,你可以使用存储过程或者参数化查询语句。显示在页面的时候再:HttpUtility.HtmlEncode();就OK了。
      

  13.   

    我觉得real_weboy(波→ONLINE)说得到是有点道理。。有否定的吗?