Сортировка кириллических строк - MySQL

Узнай цену своей работы

Формулировка задачи:

Добрый день. Есть такая таблица:
Листинг программы
  1. CREATE TABLE IF NOT EXISTS `test_table` (
  2. `id` INT(11) NOT NULL AUTO_INCREMENT,
  3. `description` VARCHAR(250) CHARACTER SET cp1251 DEFAULT NULL,
  4. PRIMARY KEY (`id`)
  5. ) ENGINE=InnoDB AUTO_INCREMENT=3520 DEFAULT CHARSET=utf8 COMMENT='Test';
  6. INSERT INTO `test_table` (`id`, `description`) VALUES
  7. (3486, 'Аккумулятор секционный СА4М-18/1'),
  8. (3487, 'Аккумулятор секционный СА4М-18/10'),
  9. (3488, 'Аккумулятор секционный СА4М-18/12'),
  10. (3489, 'Аккумулятор секционный СА4М-18/2'),
  11. (3490, 'Аккумулятор секционный СА4М-18/3'),
  12. (3491, 'Аккумулятор секционный СА4М-18/4'),
  13. (3499, 'Аккумулятор мобильный узкий А4Ц-18/3'),
  14. (3500, 'Аккумулятор мобильный узкий А4Ц-18/3-И'),
  15. (3492, 'Аккумулятор секционный СА4М-18/5'),
  16. (3493, 'Аккумулятор секционный СА4М-18/6'),
  17. (3494, 'Аккумулятор секционный СА4М-18/9'),
  18. (3495, 'Аккумулятор секционный СА4М-50/1'),
  19. (3496, 'Аккумулятор секционный СА4М-50/2'),
  20. (3497, 'Аккумулятор мобильный узкий А4Ц-18/1'),
  21. (3498, 'Аккумулятор мобильный узкий А4Ц-18/2'),
  22. (3501, 'Аккумулятор мобильный узкий А4Ц-18/3-И-С'),
  23. (3502, 'Аккумулятор мобильный узкий А4Ц-18/4'),
  24. (3503, 'Аккумулятор мобильный широкий А4Ц-04А/1'),
  25. (3504, 'Аккумулятор мобильный широкий А4Ц-04А/2'),
  26. (3505, 'Аккумулятор мобильный широкий А4Ц-04А/3'),
  27. (3506, 'Аккумулятор мобильный широкий А4Ц-04А/4'),
  28. (3507, 'Аккумулятор мобильный широкий А4Ц-18А/1'),
  29. (3508, 'Аккумулятор мобильный широкий А4Ц-18А/1_КП'),
  30. (3509, 'Аккумулятор мобильный широкий А4Ц-18А/2'),
  31. (3510, 'Аккумулятор мобильный широкий А4Ц-18А/3'),
  32. (3511, 'Аккумулятор мобильный широкий А4Ц-18А/3_КП'),
  33. (3512, 'Аккумулятор мобильный широкий А4Ц-18А/4'),
  34. (3513, 'Аккумулятор мобильный широкий А4Ц-18А/4_КП'),
  35. (3514, 'Аккумулятор мобильный широкий А4Ц-18А/5'),
  36. (3515, 'Аккумулятор мобильный широкий А4Ц-18А/6'),
  37. (3516, 'Аккумулятор мобильный широкий А4Ц-18А/7'),
  38. (3517, 'Аккумулятор мобильный широкий А4Ц-18А/8'),
  39. (3518, 'Аккумулятор мобильный широкий А4Ц-40/1'),
  40. (3519, 'Аккумулятор мобильный широкий А4Ц-40/2');
При сортировке по полю `description`
Листинг программы
  1. SELECT `description` FROM test_table ORDER BY `description` ASC;
  2. SELECT `description` FROM test_table ORDER BY `description` DESC;
получаю результаты, представленные во вложениях. Наборы символов для поля `description` выставлял разные. Ни с одним из них не было правильной сортировки. Подскажите, пожалуйста, что я делаю не так?

Решение задачи: «Сортировка кириллических строк»

textual
Листинг программы
  1. mysql> drop table if exists tsttable;
  2. Query OK, 0 rows affected (0.00 sec)
  3.  
  4. mysql> create table tsttable (
  5. -> id int not null auto_increment,
  6. -> dsc varchar(250) character set cp1251 default null,
  7. -> primary key (id)
  8. -> ) engine=innodb default character set = utf8;
  9. Query OK, 0 rows affected (0.00 sec)
  10.  
  11. mysql>
  12. mysql> INSERT INTO tsttable (id, dsc) VALUES
  13. -> (3486, 'Аккумулятор секционный СА4М-18/1'),
  14. -> (3487, 'Аккумулятор секционный СА4М-18/10'),
  15. -> (3488, 'Аккумулятор секционный СА4М-18/12'),
  16. -> (3489, 'Аккумулятор секционный СА4М-18/2'),
  17. -> (3490, 'Аккумулятор секционный СА4М-18/3'),
  18. -> (3491, 'Аккумулятор секционный СА4М-18/4'),
  19. -> (3499, 'Аккумулятор мобильный узкий А4Ц-18/3'),
  20. -> (3500, 'Аккумулятор мобильный узкий А4Ц-18/3-И'),
  21. -> (3492, 'Аккумулятор секционный СА4М-18/5'),
  22. -> (3493, 'Аккумулятор секционный СА4М-18/6'),
  23. -> (3494, 'Аккумулятор секционный СА4М-18/9'),
  24. -> (3495, 'Аккумулятор секционный СА4М-50/1'),
  25. -> (3496, 'Аккумулятор секционный СА4М-50/2'),
  26. -> (3497, 'Аккумулятор мобильный узкий А4Ц-18/1'),
  27. -> (3498, 'Аккумулятор мобильный узкий А4Ц-18/2'),
  28. -> (3501, 'Аккумулятор мобильный узкий А4Ц-18/3-И-С'),
  29. -> (3502, 'Аккумулятор мобильный узкий А4Ц-18/4'),
  30. -> (3503, 'Аккумулятор мобильный широкий А4Ц-04А/1'),
  31. -> (3504, 'Аккумулятор мобильный широкий А4Ц-04А/2'),
  32. -> (3505, 'Аккумулятор мобильный широкий А4Ц-04А/3'),
  33. -> (3506, 'Аккумулятор мобильный широкий А4Ц-04А/4'),
  34. -> (3507, 'Аккумулятор мобильный широкий А4Ц-18А/1'),
  35. -> (3508, 'Аккумулятор мобильный широкий А4Ц-18А/1_КП'),
  36. -> (3509, 'Аккумулятор мобильный широкий А4Ц-18А/2'),
  37. -> (3510, 'Аккумулятор мобильный широкий А4Ц-18А/3'),
  38. -> (3511, 'Аккумулятор мобильный широкий А4Ц-18А/3_КП'),
  39. -> (3512, 'Аккумулятор мобильный широкий А4Ц-18А/4'),
  40. -> (3513, 'Аккумулятор мобильный широкий А4Ц-18А/4_КП'),
  41. -> (3514, 'Аккумулятор мобильный широкий А4Ц-18А/5'),
  42. -> (3515, 'Аккумулятор мобильный широкий А4Ц-18А/6'),
  43. -> (3516, 'Аккумулятор мобильный широкий А4Ц-18А/7'),
  44. -> (3517, 'Аккумулятор мобильный широкий А4Ц-18А/8'),
  45. -> (3518, 'Аккумулятор мобильный широкий А4Ц-40/1'),
  46. -> (3519, 'Аккумулятор мобильный широкий А4Ц-40/2');
  47. Query OK, 34 rows affected (0.00 sec)
  48. Records: 34 Duplicates: 0 Warnings: 0
  49.  
  50. mysql>
  51. mysql> select * from tsttable order by dsc;
  52. +------+--------------------------------------------+
  53. | id | dsc |
  54. +------+--------------------------------------------+
  55. | 3497 | Аккумулятор мобильный узкий А4Ц-18/1 |
  56. | 3498 | Аккумулятор мобильный узкий А4Ц-18/2 |
  57. | 3499 | Аккумулятор мобильный узкий А4Ц-18/3 |
  58. | 3500 | Аккумулятор мобильный узкий А4Ц-18/3 |
  59. | 3501 | Аккумулятор мобильный узкий А4Ц-18/3-И-С |
  60. | 3502 | Аккумулятор мобильный узкий А4Ц-18/4 |
  61. | 3503 | Аккумулятор мобильный широкий А4Ц-04А/1 |
  62. | 3504 | Аккумулятор мобильный широкий А4Ц-04А/2 |
  63. | 3505 | Аккумулятор мобильный широкий А4Ц-04А/3 |
  64. | 3506 | Аккумулятор мобильный широкий А4Ц-04А/4 |
  65. | 3507 | Аккумулятор мобильный широкий А4Ц-18А/1 |
  66. | 3508 | Аккумулятор мобильный широкий А4Ц-18А/1_КП |
  67. | 3509 | Аккумулятор мобильный широкий А4Ц-18А/2 |
  68. | 3510 | Аккумулятор мобильный широкий А4Ц-18А/3 |
  69. | 3511 | Аккумулятор мобильный широкий А4Ц-18А/3_КП |
  70. | 3512 | Аккумулятор мобильный широкий А4Ц-18А/4 |
  71. | 3513 | Аккумулятор мобильный широкий А4Ц-18А/4_КП |
  72. | 3514 | Аккумулятор мобильный широкий А4Ц-18А/5 |
  73. | 3515 | Аккумулятор мобильный широкий А4Ц-18А/6 |
  74. | 3516 | Аккумулятор мобильный широкий А4Ц-18А/7 |
  75. | 3517 | Аккумулятор мобильный широкий А4Ц-18А/8 |
  76. | 3518 | Аккумулятор мобильный широкий А4Ц-40/1 |
  77. | 3519 | Аккумулятор мобильный широкий А4Ц-40/2 |
  78. | 3486 | Аккумулятор секционный СА4М-18/1 |
  79. | 3487 | Аккумулятор секционный СА4М-18/10 |
  80. | 3488 | Аккумулятор секционный СА4М-18/12 |
  81. | 3489 | Аккумулятор секционный СА4М-18/2 |
  82. | 3490 | Аккумулятор секционный СА4М-18/3 |
  83. | 3491 | Аккумулятор секционный СА4М-18/4 |
  84. | 3492 | Аккумулятор секционный СА4М-18/5 |
  85. | 3493 | Аккумулятор секционный СА4М-18/6 |
  86. | 3494 | Аккумулятор секционный СА4М-18/9 |
  87. | 3495 | Аккумулятор секционный СА4М-50/1 |
  88. | 3496 | Аккумулятор секционный СА4М-50/2 |
  89. +------+--------------------------------------------+
  90. 34 rows in set (0.00 sec)
  91.  
  92. mysql> \q

Объяснение кода листинга программы

  1. Убедитесь, что вы работаете в MySQL и выполните команду USE your_database (если необходим выбор базы данных).
  2. Создайте новую таблицу с помощью команды CREATE TABLE tsttable (id INT AUTO_INCREMENT PRIMARY KEY, dsc VARCHAR(250) CHARACTER SET CP1251) ENGINE=INNODB DEFAULT CHARACTER SET=UTF8;
  3. Вставьте данные в таблицу с помощью команды INSERT INTO tsttable (id, dsc) VALUES (3486, 'Аккумулятор секционный СА4М-18/1'), (3487, 'Аккумулятор секционный СА4М-18/10'), ... (3519, 'Аккумулятор мобильный широкий А4Ц-40/2');
  4. Отсортируйте данные в таблице по столбцу dsc с помощью команды SELECT * FROM tsttable ORDER BY dsc;
  5. Выполните команду DROP TABLE tsttable; для удаления таблицы (если необходимо).
  6. Завершите SQL-сессию с помощью команды \q.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.533 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы