当MySQL列太长时,AFAIK字符串会在VARCHAR中被截断。我想防止这种情况,并希望确保字符串总是被正确保存。问题是(来自MySQL):
VARCHAR列中的值是可变长度字符串.长度可以指定为0到65,535之间的值。VARCHAR的有效最大长度取决于最大行大小(65,535字节,在所有列之间共享)和使用的字符集。
StringValidator用斯特伦检查最大值长度。所以字节长度可以是不同的。但是,当在模式中定义字段时,这个长度是相关的。
那我该怎么做呢?我认为仅仅使用StringValidator是不合适的。那么,当我想要将字符串存储在UTF-8这样的特定多字节编码中时,什么才是确保没有丢失的最好方法呢?扩展StringValidator?使用其他机制?在sql中使用“严格”模式?或者Yii里已经有什么东西提供了?
/**
* Class Item
*
* @property string @str
*/
class Item extends ActiveRecord {
public function rules() {
return [
[['str'], 'string', 'max' => 1000], // ????
];
}
}发布于 2015-10-12 09:53:14
好的,我自己找出来的:和这里描述的一样,列的长度是编码不可知论的。也就是说,如果用UTF8定义一列,则为该列保留每个字符3个字节(VARCHAR(1000)为字符保留3000字节)。因此,验证将自动考虑实际长度。现在,我希望我不会遇到任何类型的unicode字符串的问题。
https://stackoverflow.com/questions/33077516
复制相似问题