我正在尝试将一些数据库表从latin1字符集转换为utf-8。许多表转换得很好,但有些表返回此错误:
alter table xyz convert to CHARACTER SET utf8; ERROR 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 | |
+-----------------------+----------------+------+-----+---------+----------------+
答案 0 :(得分:4)
问题可能是trailhead_description
字段。
在较新的mySQL版本中,VARCHAR
字段长度表示maximum number of characters而不是字节。
因为UTF-8字符最长可达4个字节,所以20,000个字符VARCHAR
可能需要多达80,000个字节 - 显然超出了最大限制。
将该列更改为TEXT
应该有效。