0

我正在尝试将我的一些数据库表从 latin1 字符集转换为 utf-8。许多表转换得很好,但有些表返回此错误:

更改表 xyz 转换为 CHARACTER SET utf8;错误 1118 (42000):行大小太大。所用表类型的最大行大小(不包括 BLOB)为 65535。您必须将某些列更改为 TEXT 或 BLOB

有解决办法吗?我应该在表格中设置的最小长度列大小是多少才能顺利进行转换?而且,如何在不破坏表中数据的情况下更改需要更改的列?

顺便说一下,这是一张桌子。

mysql> describe trailheads;
+-----------------------+----------------+------+-----+---------+----------------+
| Field                 | Type           | Null | Key | Default | Extra          |
+-----------------------+----------------+------+-----+---------+----------------+
| trailhead_id          | int(10)        | NO   | PRI | NULL    | auto_increment |
| trail_id              | int(10)        | YES  |     | NULL    |                |
| park_id               | int(10)        | YES  |     | NULL    |                |
| editor_member_id      | int(10)        | NO   |     | NULL    |                |
| trailhead_name        | varchar(1000)  | NO   |     | NULL    |                |
| trailhead_description | varchar(20000) | YES  |     | NULL    |                |
| parking               | tinyint(1)     | YES  |     | NULL    |                |
| parking_spots         | int(5)         | YES  |     | NULL    |                |
| is_free               | tinyint(1)     | YES  |     | NULL    |                |
| cost_details          | varchar(5000)  | YES  |     | NULL    |                |
| lat                   | float(9,6)     | NO   |     | NULL    |                |
| lng                   | float(9,6)     | NO   |     | NULL    |                |
| bathrooms_nearby      | tinyint(1)     | YES  |     | NULL    |                |
| wheelchair_accessible | tinyint(1)     | YES  |     | NULL    |                |
| date_added            | date           | NO   |     | NULL    |                |
| last_edit_date        | date           | YES  |     | NULL    |                |
+-----------------------+----------------+------+-----+---------+----------------+
4

1 回答 1

4

问题可能是trailhead_description领域。

在较新的 mySQL 版本中,VARCHAR字段长度表示最大字符数,而不是字节数。

因为一个 UTF-8 字符最多可以有四个字节长,一个 20,000 个字符VARCHAR可能需要最多 80,000 个字节 - 显然超出了最大限制。

将该列更改为TEXT应该可以工作。

于 2011-05-25T07:03:55.520 回答