用户
 找回密码
 入住 CI 中国社区
搜索
查看: 5027|回复: 10
收起左侧

[已解决] 数据库操作

[复制链接]
发表于 2011-6-7 15:05:14 | 显示全部楼层 |阅读模式
1CI币
使用$this->db->insert/update等,会自动转义,也就是说数据长度可能会变大(增加了转义符)。
那么如果数据字段是test varchar(100),来个长度刚好的数据,安然通过$this->check($dataLen100);然后我们执行$this->db->insert('exTable',array('test'=>$dataLen100).可是,经过转义数据的长度已经大于100了,这样会导致怎么?该如何处理?

最佳答案

查看完整内容

呵呵,数据库表字段的长度设计肯定要留有余地的
发表于 2011-6-7 15:05:15 | 显示全部楼层
身是客 发表于 2011-6-7 15:53
就算varchar不必考虑,那对于一个char类型的来说呢?

呵呵,数据库表字段的长度设计肯定要留有余地的
回复

使用道具 举报

发表于 2011-6-7 15:11:46 | 显示全部楼层
表字段长度设计的时候,应该大于代码的规定长度,比如你里你的意思是代码规定test应该不大于100
那么你的表的test字段应该是200或者以上等等,验证的长度应该是在ci这

评分

参与人数 1威望 +5 收起 理由
身是客 + 5 赞一个!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2011-6-7 15:20:45 | 显示全部楼层
zhouli520 发表于 2011-6-7 15:11
表字段长度设计的时候,应该大于代码的规定长度,比如你里你的意思是代码规定test应该不大于100
那么你的表的 ...

但对于一个varchar(255)呢,把类型改大貌似不是一个好方法,我用escape_str() 和 set($name,$value,FALSE) 和query($sql)来处理,可是感觉很繁琐,很不给力
回复

使用道具 举报

发表于 2011-6-7 15:24:46 | 显示全部楼层
身是客 发表于 2011-6-7 15:20
但对于一个varchar(255)呢,把类型改大貌似不是一个好方法,我用escape_str() 和 set($name,$value,FALSE ...

varchar(m) 变长字符串。M 表示最大列长度。M的范围是0到65,535。(VARCHAR的最大实际长度由最长的行的大小和使用的字符集确定,最大有效长度是65,532字节)。
255不是上限吧
回复

使用道具 举报

发表于 2011-6-7 15:38:17 | 显示全部楼层
楼上正解...varchar最大长度又不是只有255,你是不是和其他数据库搞混了....
回复

使用道具 举报

 楼主| 发表于 2011-6-7 15:52:32 | 显示全部楼层
jeongee 发表于 2011-6-7 15:24
varchar(m) 变长字符串。M 表示最大列长度。M的范围是0到65,535。(VARCHAR的最大实际长度由最长的行的大 ...

是不是就是说,我们不必考虑数据库自动转义带来的字符长度的增加,是吗?
回复

使用道具 举报

 楼主| 发表于 2011-6-7 15:53:33 | 显示全部楼层
就算varchar不必考虑,那对于一个char类型的来说呢?
回复

使用道具 举报

 楼主| 发表于 2011-6-7 15:59:05 | 显示全部楼层
关于varchar(w3school):
        保存可变长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的最大长度。最多 255 个字符。
注释:如果值的长度大于 255,则被转换为 TEXT 类型。

回复

使用道具 举报

 楼主| 发表于 2011-6-7 16:01:06 | 显示全部楼层
是自己一开始就没考虑好。。。
回复

使用道具 举报

本版积分规则