なぜmysqlコマンドラインはutf8カラムを非utfカラムの2倍の幅で出力するのですか?例:utf8でのMySQLコマンドラインテーブルのカラム幅
$ mysql -u user --default-character-set=utf8
mysql> select "αβγαβγαβγαβγαβγαβγαβγ";
+--------------------------------------------+
| αβγαβγαβγαβγαβγαβγαβγ |
+--------------------------------------------+
| αβγαβγαβγαβγαβγαβγαβγ |
+--------------------------------------------+
1 row in set (0.00 sec)
mysql> select "abcabcabcabcabcabcabc";
+-----------------------+
| abcabcabcabcabcabcabc |
+-----------------------+
| abcabcabcabcabcabcabc |
+-----------------------+
1 row in set (0.00 sec)
あなたが見ることができるように、最初のテーブルには列が2倍の幅二のテーブルと比較している、とのラインが半画面ワイド以上のものを得るために起動したときに、これは多くの場合、書式設定壊れます。
私はこれをMySQL 14.14とMariaDB 15.1で試しました。
utf8以外の列と同じ幅のutf8列を出力する方法はありますか?
編集:結果のフォーマッティングに使用される関数get_field_disp_length()
コメントブロックの説明があるmysql.cc(mysql
クライアントのソース)のソースコードで
MariaDB [(none)]> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
'SHOW VARIABLES LIKE 'char%';' - 何かが間違っていると思われます。ギリシャ文字はutf8で2バイトとなります。 –
@RickJames - そのコマンドの出力を質問に追加しました。ほとんどの非latin1文字はutf8で2バイトを取ることは知っていますが、列表示幅を計算するときにmysqlが文字カウントの代わりにバイト数を使用するのはなぜですか? – Rogach