html的表单length长度是以字符个数计算的,不管是汉字还是字母,但是数据库又是按字节计算的,汉字占2个字母占1个,这样容易造成写入的时候长度超出的问题。
两个问题:
1.有没有好的方法,能够在前端或者php或者mysql之间使用统一的方法计算长度?
2.还是只能把数据库长度设的足够大,让表单永远不会超出?
.
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
mysql在4.1之后,char和varchar定义的就是字符长度了。
具体可以去看下文档The CHAR and VARCHAR Types。
而4.1的文档中有直接提到。
统一计算长度,是基于“长度”这个概念是一样的标准的,首先你要规定你的“长度”指的是什么。
如果“长度”指的字节长度,那么可以这样(假设页面编码是utf8):
javascript函数lengthInUtf8Bytes来自于String length in bytes in JavaScript
如果“长度”指的编码长度,还是假设页面utf8编码:
这样长度都是一致的,所以要在最开始就定义好你的“长度”指的是什么很重要
前台限制只是障眼法,数据库较量弄长点,不用太抠门了
如果你统一都使用UTF-8编码,就没有这个苦恼了。数据库表用UTF-8,一个汉字或字母都是一,也就是说varchar(2)类型,你肯定可以把 "测试” 这两个字存入。对应mysql实际存储会使用6个字节,通常情况下一个汉字需要用3个字节来存储,但这是mysql底层做的事,跟你定义的varchar里面的长度没有关系。
2楼好专业,赞
数据库字段不一定非要搞得那么精准,说十个字节就一定限制十个字节,限制长度是通过程序做的,数据库字段只是提供一个范围而已
如果可以后台也需要对参数进行长度校验,别人是可以直接请求后台服务接口的。
前端有对于的maxlength可以控制一下输入长度。
如果不怕麻烦的话,
你可以自己设计一个通用拦截器进行提交前检查,
首先获取数据库的元数据信息, 比如编码和字段长度(这个可以使用缓存的信息一般不会变化).
然后根据这个算出相应的字段最长能容纳几个汉字,几个英文字符.
之后在前端或者php计算出相应的字节数, 这样就不会有问题了.
不过性能会因此稍有损失.
更好的办法就是对不定长度的数据把字段使用变长类型比如varchar设计的足够大.
程序和数据库编码保持一致即可