mysql 数据库 自动截取数据的问题---mysql的sql_model的四种模式:宽松模式、严格模式

mysql支持的sql_mode模式:ANSI、TRADITIONAL、STRICT_ALL_TABLES和STRICT_TRANS_TABLES。

ANSI模式:宽松模式,对插入数据进行校验,如果不符合定义类型或长度,对数据类型调整或截断保存,报warning警告。

TRADITIONAL模式:严格模式,当向mysql数据库插入数据时,进行数据的严格校验,保证错误数据不能插入,报error错误。用于事物时,会进行事物的回滚。

STRICT_TRANS_TABLES模式:严格模式,进行数据的严格校验,错误数据不能插入,报error错误。只对支持事务的表有效。

STRICT_ALL_TABLES模式:严格模式,进行数据的严格校验,错误数据不能插入,报error错误。对所有表都有效。

问题描述:

添加一个超长的文章的时候,文章内容字段被mysql截取后插入。

debug:程序插入的sql没有问题。

问题原因:mysql 使用了松散模式,造成自动截取。给debug带来困难,

解决办法:

1,开启mysql 严格模式,对开发有好处;

2,换mysql的字段类型

参考:

下面贴一下mysql中和text相关的类型最大长度限制,请根据业务类型进行合理选择:

TINYTEXT 最大长度是 255 (2^8 – 1) 个字符。

TEXT 最大长度是 65535 (2^16 – 1) 个字符。

MEDIUMTEXT 最大长度是 16777215 (2^24 – 1) 个字符。

LONGTEXT 最大长度是 4294967295 (2^32 – 1) 个字符。

通过修改MySQL的配置文件,在配置文件中查找sql-mode,将此行修改成为:

sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

如果查找不到sql-mode=则在[mysqld]下加入即可,推荐第二种方法,可以一劳永逸。

上一篇:性能测试之五--webservices接口测试


下一篇:css居然有根据容器宽度自动截取长度加省略号功能,强大!!