MySQL命令行解释器根据字段的长度()打印列宽,而不是按照char_length()。因此,字段列不排列。
$ mysql -uroot -p
> select ('שלום עולמי');
+---------------------+
| שלום עולמי |
+---------------------+
| שלום עולמי |
+---------------------+
1 row in set (0.00 sec)
$ mysql --default-character-set=utf8 -uroot -p
> select ('שלום עולמי');
+---------------------+
| שלום עולמי |
+---------------------+
| שלום עולמי |
+---------------------+
1 row in set (0.00 sec)
$ mysql --default-character-set=utf8mb4 -uroot -p
> select ('שלום עולמי');
+---------------------+
| שלום עולמי |
+---------------------+
| שלום עולמי |
+---------------------+
1 row in set (0.00 sec)
我们可以看到字符串שלום עולמי
长10个字符但长19个字节:9个希伯来语(UTF-8中的双字节)字符为18个字节,空间为另一个字节(单字节为UTF-8)。但是,行分隔符长度为23个字符:+
端盖为2个,列左侧和右侧为-
边距为2个,列本身为19个。
如何配置MySQL使用char_length()(10)作为显示列宽而不是length()?
这是在CentOS 7.3上使用MariaDB 10.1.24。我查看了this related question,但可以看出,接受的答案对我的情况没有帮助。