MySQL控制台。 Linux操作系统。结果字段长度是其圆形字符串最长的两倍

时间:2013-10-21 16:06:07

标签: mysql

我发现结果表字段比最长字符串值长得多,如果它是西里尔字母(可能还有其他非拉丁语)。我需要得到非常紧凑的结果。

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

1 个答案:

答案 0 :(得分:0)

我相信这可能是因为utf8字符每个字符最多需要三个字节。因此,虽然第三个结果中的字符串看起来是16个字符(КирилицаКирилица),但它需要存储32个字符,因此该框的宽度为32个字符。在这种情况下,我假设字符串中的字符每个都使用2个字节。看起来mysql客户端正在检查最大字段长度是32个字符(即使这导致16个字符)。

您可以尝试存储值来测试:

ирилицаКирилицаирилицаКирилица

这需要存储64个字符,并且会被截断。