首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Yii2验证:如何确保字符串不被数据库截断?

Yii2验证:如何确保字符串不被数据库截断?
EN

Stack Overflow用户
提问于 2015-10-12 09:22:03
回答 1查看 396关注 0票数 1

当MySQL列太长时,AFAIK字符串会在VARCHAR中被截断。我想防止这种情况,并希望确保字符串总是被正确保存。问题是(来自MySQL):

VARCHAR列中的值是可变长度字符串.长度可以指定为0到65,535之间的值。VARCHAR的有效最大长度取决于最大行大小(65,535字节,在所有列之间共享)和使用的字符集。

StringValidator用斯特伦检查最大值长度。所以字节长度可以是不同的。但是,当在模式中定义字段时,这个长度是相关的。

那我该怎么做呢?我认为仅仅使用StringValidator是不合适的。那么,当我想要将字符串存储在UTF-8这样的特定多字节编码中时,什么才是确保没有丢失的最好方法呢?扩展StringValidator?使用其他机制?在sql中使用“严格”模式?或者Yii里已经有什么东西提供了?

代码语言:javascript
复制
/**
 * Class Item
 * 
 * @property string @str
 */
class Item extends ActiveRecord {
    public function rules() {
        return [
            [['str'], 'string', 'max' => 1000], // ????
        ];
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-12 09:53:14

好的,我自己找出来的:和这里描述的一样,列的长度是编码不可知论的。也就是说,如果用UTF8定义一列,则为该列保留每个字符3个字节(VARCHAR(1000)为字符保留3000字节)。因此,验证将自动考虑实际长度。现在,我希望我不会遇到任何类型的unicode字符串的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33077516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档