LINUX.ORG.RU

Ширина таблицы Mysql в два раза больше необходимого

 , ,


0

1

Всем привет! При любых запросах к базе данных Mysql (проводимых непосредственно с помощью клиента mysql) столбцы, содержащие русский текст, в два раза шире необходимого (все остальные столбцы — с числами, с латиницей — отображаются правильно). Как я предполагаю, это происходит из-за того, что один кириллический символ в кодировке utf-8 занимает два байта, и при подсчёте длины строки считаются именно байты, а не символы; отсюда неверная, преувеличенная длина строки и слишком широкие столбцы. Как это исправить? пытался играть с кодировкой, устанавливать utf-8, чтобы он корректно обрабатывался, но не выходит.

Кое-какие данные:

~ ➤ mysql --version
mysql  Ver 8.0.26-0ubuntu0.20.04.3 for Linux on x86_64 ((Ubuntu))
~ ➤ uname -a
Linux lis-pc 5.4.0-81-generic #91-Ubuntu SMP Thu Jul 15 19:09:17 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

Пример «кривой» таблицы:

mysql> select bscore, name from work order by bscore desc limit 10;
+--------+----------------------------------------------------------------------------+
| bscore | name                                                                       |
+--------+----------------------------------------------------------------------------+
| 8.9764 | Побег из Шоушенка                                                          |
| 8.9712 | Один литр слёз                                                             |
|  8.954 | Зелёная миля                                                               |
| 8.9029 | Форрест Гамп                                                               |
| 8.8938 | Леон                                                                       |
| 8.8582 | Достучаться до небес                                                       |
| 8.8484 | Место встречи изменить нельзя                                              |
| 8.8235 | Король Лев                                                                 |
| 8.8226 | Шерлок Холмс и доктор Ватсон: Знакомство                                   |
| 8.8203 | Рик и Морти                                                                |
+--------+----------------------------------------------------------------------------+
10 rows in set (0,00 sec)

Это не баг а фича в консольном клиенте mysql. Используйте графический клиент и будет вам счастье.

biglpfan
()

Как вариант: отображение результатов запроса вертикально.

MariaDB [foo]> SELECT bscore, name FROM work ORDER BY bscore DESC LIMIT 10\G
*************************** 1. row ***************************
bscore: 8.9764
  name: Побег из Шоушенка
*************************** 2. row ***************************
bscore: 8.9712
  name: Один литр слёз
*************************** 3. row ***************************
bscore: 8.954
  name: Зелёная миля
*************************** 4. row ***************************
bscore: 8.9029
  name: Форрест Гамп
*************************** 5. row ***************************
bscore: 8.8938
  name: Леон
*************************** 6. row ***************************
bscore: 8.8582
  name: Достучаться до небес
*************************** 7. row ***************************
bscore: 8.8484
  name: Место встречи изменить нельзя
*************************** 8. row ***************************
bscore: 8.8235
  name: Король Лев
*************************** 9. row ***************************
bscore: 8.8226
  name: Шерлок Холмс и доктор Ватсон: Знакомство
*************************** 10. row ***************************
bscore: 8.8203
  name: Рик и Морти
10 rows in set (0.001 sec)
Darth_Revan ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.