文章目录
  1. 1. 从用户友好性看中文长度的校验(页面与数据库对字符长度的不同表示)
    1. 1.0.1. 从用户友好性看中文长度的校验(页面与数据库对字符长度的不同表示)

从用户友好性看中文长度的校验(页面与数据库对字符长度的不同表示)

从用户友好性看中文长度的校验(页面与数据库对字符长度的不同表示)

\

字符的长度校验是程序中必不可少的。
\

如一个业务需求是名称不能大于10个字,在数据库设计时该字段设为最大长度10。

计算机在用gbk编码存储中文字符时需要2个字节,而ascii字符需要1个字节。
\

不幸的是,不管JavaScript还是Java在求字符长度的方法对中英文是一视同仁的,即”中”.length()
和”e”.length()的返回值都是1,象Struts这样的验证拦截器也是这样。这样好了,用户输入6个中文字符,傻了,数据库插入数据失败:违反
最大长度约束。
\

最快的解决办法是将可以输入中文的字段的最大长度放大到2倍或者在页面上控制长度为数据库字符/2的大小。
\

用户满意了,但有些人会狗尾续貂,想现在名称字段明明可以存储20个英文字符,你却硬生生地砍掉一半,不是浪费了数据库潜力嘛。于是乎费老鼻子劲
在JavaScript中,在Java中将中文字符算做2个,用了长度验证拦截器的还得专门写个中文长度校验的拦截器配置到应用中,貌是很好很强大,然后
在长度提示中出现如下字符:名称长度不能超过20(一个中文算2个字符)
\

程序员爽了,可从用户角度可不管你是中文,英文还是标点,肉眼看到的统统计为一个字符,这样做的结果只能使用户无谓的困惑。
\

我们写的程序是给用户用的,不只是自己用来欣赏的,这是很多程序员需要克服的一个思维习惯。

PS:SQL
Server中的nvarchar类型对多字节字符和单字节字符一视同仁,比较方便。

文章目录
  1. 1. 从用户友好性看中文长度的校验(页面与数据库对字符长度的不同表示)
    1. 1.0.1. 从用户友好性看中文长度的校验(页面与数据库对字符长度的不同表示)