为了账号安全,请及时绑定邮箱和手机立即绑定

表单字符长度与数据库字段长度

表单字符长度与数据库字段长度

慕容3067478 2019-04-10 20:49:24
html的表单length长度是以字符个数计算的,不管是汉字还是字母,但是数据库又是按字节计算的,汉字占2个字母占1个,这样容易造成写入的时候长度超出的问题。两个问题:1.有没有好的方法,能够在前端或者php或者mysql之间使用统一的方法计算长度?2.还是只能把数据库长度设的足够大,让表单永远不会超出?.
查看完整描述

2 回答

?
慕码人2483693

TA贡献1860条经验 获得超9个赞

mysql在4.1之后,char和varchar定义的就是字符长度了。
具体可以去看下文档TheCHARandVARCHARTypes。
而4.1的文档中有直接提到。
TheCHARandVARCHARtypesaredeclaredwithalengththatindicatesthemaximumnumberofcharactersyouwanttostore.Forexample,CHAR(30)canholdupto30characters.(BeforeMySQL4.1,thelengthisinterpretedasnumberofbytes.)
                            
查看完整回答
反对 回复 2019-04-10
?
白板的微信

TA贡献1883条经验 获得超3个赞

统一计算长度,是基于“长度”这个概念是一样的标准的,首先你要规定你的“长度”指的是什么。
如果“长度”指的字节长度,那么可以这样(假设页面编码是utf8):
//javascript
functionlengthInUtf8Bytes(str){
//Matchesonlythe10..bytesthatarenon-initialcharactersinamulti-bytesequence.
varm=encodeURIComponent(str).match(/%[89ABab]/g);
returnstr.length+(m?m.length:0);
}
len=lengthInUtf8Bytes(str);
//php
$len=strlen($str);
//mysql
CREATEDATABASE`byte_test`
CHARACTERSETlatin1
COLLATElatin1_general_ci;
javascript函数lengthInUtf8Bytes来自于StringlengthinbytesinJavaScript
如果“长度”指的编码长度,还是假设页面utf8编码:
//javascript
len=str.length;
//php
$len=mb_strlen($str,"UTF-8");
//mysql
CREATEDATABASE`utf8_test`
CHARACTERSETutf8
COLLATEutf8_general_ci;
这样长度都是一致的,所以要在最开始就定义好你的“长度”指的是什么很重要
                            
查看完整回答
反对 回复 2019-04-10
  • 2 回答
  • 0 关注
  • 350 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信