我发现结果表字段比最长字符串值长得多,如果它是西里尔字母(可能还有其他非拉丁语)。我需要得到非常紧凑的结果。
mysql> select * from tmp7 limit 1;
+-------+
| dir |
+-------+
| latin |
+-------+
1 row in set (0.00 sec)
mysql> select * from tmp7 limit 2;
+------------------+
| dir |
+------------------+
| latin |
| Кирилица |
+------------------+
2 rows in set (0.00 sec)
mysql> select * from tmp7;
+----------------------------------+
| dir |
+----------------------------------+
| latin |
| Кирилица |
| КирилицаКирилица |
+----------------------------------+
3 rows in set (0.00 sec)
mysql> show create table tmp7;
+-------+---------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+---------------------------------------------------------------------------------------------+
| tmp7 | CREATE TABLE `tmp7` (
`dir` varchar(60) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+---------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
这是MySQL的错误吗?有没有解决方法?
mysql Ver 14.14 Distrib 5.5.32,for debian-linux-gnu(x86_64)using readline 6.2
答案 0 :(得分:0)
我相信这可能是因为utf8字符每个字符最多需要三个字节。因此,虽然第三个结果中的字符串看起来是16个字符(КирилицаКирилица),但它需要存储32个字符,因此该框的宽度为32个字符。在这种情况下,我假设字符串中的字符每个都使用2个字节。看起来mysql客户端正在检查最大字段长度是32个字符(即使这导致16个字符)。
您可以尝试存储值来测试:
ирилицаКирилицаирилицаКирилица
这需要存储64个字符,并且会被截断。