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

Database Yii2验证:如何确保字符串不会被数据库截断?,database,validation,activerecord,encoding,yii2,Database,Validation,Activerecord,Encoding,Yii2,在MySQL中,AFAIK字符串对于列来说太长时会被截断。我想防止这种情况,并希望确保字符串始终得到正确保存。问题是(来自MySQL): VARCHAR列中的值是可变长度字符串。长度可以 指定为0到65535之间的值。有效最大长度 VARCHAR的最大行大小(65535字节,其中 在所有列中共享)和使用的字符集 StringValidator使用检查长度。因此,字节长度可以与之不同。但在模式中定义字段时,此长度是相关的长度 那我该怎么做呢?我认为单独使用StringValidator是不合适的。

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

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

StringValidator使用检查长度。因此,字节长度可以与之不同。但在模式中定义字段时,此长度是相关的长度

那我该怎么做呢?我认为单独使用StringValidator是不合适的。那么,当我想以某种多字节编码(如UTF-8)存储字符串时,什么是确保不丢失任何内容的最佳方法呢?扩展StringValidator?使用其他机制?在sql中使用“严格”模式?或者Yii中已经提供了什么

/**
*类项目
* 
*@property string@str
*/
类项扩展ActiveRecord{
公共职能规则(){
返回[
[['str'],'string','max'=>1000],/????
];
}
}

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

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