深圳横岗做网站,建设企业网站需要什么,提供o2o网站建设,网络上做假网站做物流MySQL字段设置的varchar长度小于数据长度自动截取丢弃超出的长度而不是报错#xff1f;
事情是这样的#xff0c;我们一个订单表存放了商品的快照信息其中快照信息存储的是json格式商品信息#xff0c;当查看订单是报错了#xff0c;发现我们后端服务查询到订单的快照信息…MySQL字段设置的varchar长度小于数据长度自动截取丢弃超出的长度而不是报错
事情是这样的我们一个订单表存放了商品的快照信息其中快照信息存储的是json格式商品信息当查看订单是报错了发现我们后端服务查询到订单的快照信息进行json转Java实体时报错了是因为json格式错误后竟发现json格式并不完整而该字段存储的字符串正好是设置的大小VARCHAR(4000) DEFAULT NULL 。
原来在数据库中当数据长度超出字段设置的 VARCHAR 长度时行为会取决于具体的数据库系统和其配置。在MySQL中这个行为受到 SQL模式sql_mode 的控制。
不严格模式 默认
在默认情况下或者在非严格模式NO_STRICT下当插入长度超出 VARCHAR 字段定义的字符串时MySQL会自动截断超出的部分并发出一个警告而不是错误。这种行为允许操作继续执行但不保证数据完整性。
严格模式STRICT 模式
当MySQL数据库设置为 严格模式STRICT_TRANS_TABLES 或 STRICT_ALL_TABLES 时如果尝试插入或更新超过设定长度的数据将会导致错误并阻止该事务进行。这保证了数据的完整性因为不允许存储部分数据。