0

一部のDBテーブルをlatin1文字セットからutf-8に変換しようとしています。多くのテーブルは正常に変換されましたが、一部のテーブルはこのエラーを返します。

テーブルxyzを文字セット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文字の長さは最大4バイトである可能性があるため、20,000文字VARCHARは最大80,000バイトかかる可能性があります。これは明らかに最大制限を超えています。

その列をに変更すると機能するTEXTはずです。

于 2011-05-25T07:03:55.520 に答える