浏览 3647 次
锁定老帖子 主题:从用户友好性看中文长度的校验
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-07-10
如一个业务需求是名称不能大于10个字,在数据库设计时该字段设为最大长度10。 计算机在用gbk编码存储中文字符时需要2个字节,而ascii字符需要1个字节。 不幸的是,不管JavaScript还是Java在求字符长度的方法对中英文是一视同仁的,即"中".length()和"e".length()的返回值都是1,象Struts这样的验证拦截器也是这样。这样好了,用户输入6个中文字符,傻了,数据库插入数据失败:违反最大长度约束。 最快的解决办法是将可以输入中文的字段的最大长度放大到2倍。 用户满意了,但有些人会狗尾续貂,想现在名称字段明明可以存储20个英文字符,你却硬生生地砍掉一半,不是浪费了数据库潜力嘛。于是乎费老鼻子劲在JavaScript中,在Java中将中文字符算做2个,用了长度验证拦截器的还得专门写个中文长度校验的拦截器配置到应用中,貌是很好很强大,然后在长度提示中出现如下字符:名称长度不能超过20(一个中文算2个字符) 程序员爽了,可从用户角度可不管你是中文,英文还是标点,肉眼看到的统统计为一个字符,这样做的结果只能使用户无谓的困惑。 我们写的程序是给用户用的,不只是自己用来欣赏的,这是很多程序员需要克服的一个思维习惯。 PS:SQL Server中的nvarchar类型对多字节字符和单字节字符一视同仁,比较方便。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-07-10
通常一个汉字表达的意思要比一个字母多,所以通常来说不会有什么问题
|
|
返回顶楼 | |
发表时间:2008-07-11
guyongpeng 写道 字符的长度校验是程序中必不可少的。
如一个业务需求是名称不能大于10个字,在数据库设计时该字段设为最大长度10。 计算机在用gbk编码存储中文字符时需要2个字节,而ascii字符需要1个字节。 不幸的是,不管JavaScript还是Java在求字符长度的方法对中英文是一视同仁的,即"中".length()和"e".length()的返回值都是1,象Struts这样的验证拦截器也是这样。这样好了,用户输入6个中文字符,傻了,数据库插入数据失败:违反最大长度约束。 最快的解决办法是将可以输入中文的字段的最大长度放大到2倍。 用户满意了,但有些人会狗尾续貂,想现在名称字段明明可以存储20个英文字符,你却硬生生地砍掉一半,不是浪费了数据库潜力嘛。于是乎费老鼻子劲在JavaScript中,在Java中将中文字符算做2个,用了长度验证拦截器的还得专门写个中文长度校验的拦截器配置到应用中,貌是很好很强大,然后在长度提示中出现如下字符:名称长度不能超过20(一个中文算2个字符) 程序员爽了,可从用户角度可不管你是中文,英文还是标点,肉眼看到的统统计为一个字符,这样做的结果只能使用户无谓的困惑。 我们写的程序是给用户用的,不只是自己用来欣赏的,这是很多程序员需要克服的一个思维习惯。 PS:SQL Server中的nvarchar类型对多字节字符和单字节字符一视同仁,比较方便。 数据库多用些空间算什么?用户感知很重要。一个英文跟一个中文没有区别 |
|
返回顶楼 | |