com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'title' at row 1

做实验用到wiki的数据,想要把xml格式的内容转存到数据库中,结果碰到了好多问题。

com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'title' at row 1

从页面上输入中文保存到MySQL数据库时候就会出现上面的问题,并且输入的中文不是过长。这种情况下应该是字符集的问题。

建表语句为:

create table article
(
   id int primary key auto_increment,
   pid int,
   rootid int,
   title varchar(255),
   content text,
   pdate datetime,
   isleaf int
)engine innodb default charset=gbk;

用命令:show table status like 'article'; 就可以看到表的状态信息,其中的Collation项为:gbk_chinese_ci,因此MYSQL JDBC连接参数要设置为一致:

String url = "jdbc:mysql://localhost/bbs? user=root&password=1234&useUnicode=true&characterEncoding=gbk";
Connection conn = DriverManager.getConnection(url);

后来发现我确实是在数据库中设置的text长度不够,mysql中text类型是可变长度的字符串,最多65535个字符;把字段类型改成MEDIUMTEXT(最多存放16777215个字符)或者LONGTEXT(最多存放4294967295个字符)就解决了。

### 解决 MySQL 数据截断错误 `Data truncation: Data too long for column 'code' at row 1` 当出现 `com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'code' at row 1` 错误时,表示插入或更新数据库记录时,字段 `code` 的数据长度超过了数据库表中该字段定义的最大长度限制。以下是具体的解决方案: #### 1. 检查字段定义并调整字段长度 首先,需要检查数据库表中 `code` 字段的定义。可以通过以下 SQL 语句查看字段的结构: ```sql DESCRIBE your_table_name; ``` 假设 `code` 字段当前定义为 `VARCHAR(50)`,但实际插入的数据长度超过 50 个字符,则需要调整字段长度。例如,将其扩展为 `VARCHAR(255)`: ```sql ALTER TABLE your_table_name MODIFY code VARCHAR(255); ``` 如果字段使用的是 `CHAR` 类型,也可以根据需求改为 `VARCHAR`,以节省存储空间。 #### 2. 验证插入或更新的数据长度 在代码层面,建议在执行插入或更新操作之前,对 `code` 字段的数据长度进行校验,确保其不会超过数据库字段定义的最大长度。例如,在 Java 中可以使用如下逻辑: ```java if (code != null && code.length() > 255) { throw new IllegalArgumentException("code 字段长度不能超过 255"); } ``` #### 3. 启用宽松模式避免严格模式下的数据截断异常 MySQL 的 SQL 模式(SQL Mode)会影响数据插入时的校验行为。如果启用了 `STRICT_TRANS_TABLES` 或 `STRICT_ALL_TABLES` 模式,MySQL 会在数据长度超过限制时直接抛出错误。可以通过修改 MySQL 的配置文件(如 `my.cnf` 或 `my.ini`)来禁用严格模式: ```ini [mysqld] sql_mode=NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE ``` 修改后重启 MySQL 服务以生效配置。此方法适用于开发或测试环境,但在生产环境中应谨慎使用,以避免数据不一致问题。 #### 4. 使用日志和调试工具定位数据来源 如果 `code` 字段的数据来源于用户输入或外部系统,建议在应用层记录详细的日志,包括插入或更新的数据内容,以便快速定位导致问题的具体数据。例如,在 Java 应用中可以使用日志框架记录相关信息: ```java logger.debug("Inserting code value: {}", code); ``` #### 5. 使用数据库迁移工具管理字段变更 在生产环境中修改数据库字段结构时,建议使用数据库迁移工具(如 Flyway 或 Liquibase)来管理变更。这可以确保字段修改操作在多个环境中保持一致,并且具备回滚能力。 ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值