Сортировка кириллических строк - MySQL
Формулировка задачи:
Добрый день.
Есть такая таблица:
При сортировке по полю `description`
получаю результаты, представленные во вложениях.
Наборы символов для поля `description` выставлял разные. Ни с одним из них не было правильной сортировки.
Подскажите, пожалуйста, что я делаю не так?
Листинг программы
- CREATE TABLE IF NOT EXISTS `test_table` (
- `id` INT(11) NOT NULL AUTO_INCREMENT,
- `description` VARCHAR(250) CHARACTER SET cp1251 DEFAULT NULL,
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB AUTO_INCREMENT=3520 DEFAULT CHARSET=utf8 COMMENT='Test';
- INSERT INTO `test_table` (`id`, `description`) VALUES
- (3486, 'Аккумулятор секционный СА4М-18/1'),
- (3487, 'Аккумулятор секционный СА4М-18/10'),
- (3488, 'Аккумулятор секционный СА4М-18/12'),
- (3489, 'Аккумулятор секционный СА4М-18/2'),
- (3490, 'Аккумулятор секционный СА4М-18/3'),
- (3491, 'Аккумулятор секционный СА4М-18/4'),
- (3499, 'Аккумулятор мобильный узкий А4Ц-18/3'),
- (3500, 'Аккумулятор мобильный узкий А4Ц-18/3-И'),
- (3492, 'Аккумулятор секционный СА4М-18/5'),
- (3493, 'Аккумулятор секционный СА4М-18/6'),
- (3494, 'Аккумулятор секционный СА4М-18/9'),
- (3495, 'Аккумулятор секционный СА4М-50/1'),
- (3496, 'Аккумулятор секционный СА4М-50/2'),
- (3497, 'Аккумулятор мобильный узкий А4Ц-18/1'),
- (3498, 'Аккумулятор мобильный узкий А4Ц-18/2'),
- (3501, 'Аккумулятор мобильный узкий А4Ц-18/3-И-С'),
- (3502, 'Аккумулятор мобильный узкий А4Ц-18/4'),
- (3503, 'Аккумулятор мобильный широкий А4Ц-04А/1'),
- (3504, 'Аккумулятор мобильный широкий А4Ц-04А/2'),
- (3505, 'Аккумулятор мобильный широкий А4Ц-04А/3'),
- (3506, 'Аккумулятор мобильный широкий А4Ц-04А/4'),
- (3507, 'Аккумулятор мобильный широкий А4Ц-18А/1'),
- (3508, 'Аккумулятор мобильный широкий А4Ц-18А/1_КП'),
- (3509, 'Аккумулятор мобильный широкий А4Ц-18А/2'),
- (3510, 'Аккумулятор мобильный широкий А4Ц-18А/3'),
- (3511, 'Аккумулятор мобильный широкий А4Ц-18А/3_КП'),
- (3512, 'Аккумулятор мобильный широкий А4Ц-18А/4'),
- (3513, 'Аккумулятор мобильный широкий А4Ц-18А/4_КП'),
- (3514, 'Аккумулятор мобильный широкий А4Ц-18А/5'),
- (3515, 'Аккумулятор мобильный широкий А4Ц-18А/6'),
- (3516, 'Аккумулятор мобильный широкий А4Ц-18А/7'),
- (3517, 'Аккумулятор мобильный широкий А4Ц-18А/8'),
- (3518, 'Аккумулятор мобильный широкий А4Ц-40/1'),
- (3519, 'Аккумулятор мобильный широкий А4Ц-40/2');
Листинг программы
- SELECT `description` FROM test_table ORDER BY `description` ASC;
- SELECT `description` FROM test_table ORDER BY `description` DESC;
Решение задачи: «Сортировка кириллических строк»
textual
Листинг программы
- mysql> drop table if exists tsttable;
- Query OK, 0 rows affected (0.00 sec)
- mysql> create table tsttable (
- -> id int not null auto_increment,
- -> dsc varchar(250) character set cp1251 default null,
- -> primary key (id)
- -> ) engine=innodb default character set = utf8;
- Query OK, 0 rows affected (0.00 sec)
- mysql>
- mysql> INSERT INTO tsttable (id, dsc) VALUES
- -> (3486, 'Аккумулятор секционный СА4М-18/1'),
- -> (3487, 'Аккумулятор секционный СА4М-18/10'),
- -> (3488, 'Аккумулятор секционный СА4М-18/12'),
- -> (3489, 'Аккумулятор секционный СА4М-18/2'),
- -> (3490, 'Аккумулятор секционный СА4М-18/3'),
- -> (3491, 'Аккумулятор секционный СА4М-18/4'),
- -> (3499, 'Аккумулятор мобильный узкий А4Ц-18/3'),
- -> (3500, 'Аккумулятор мобильный узкий А4Ц-18/3-И'),
- -> (3492, 'Аккумулятор секционный СА4М-18/5'),
- -> (3493, 'Аккумулятор секционный СА4М-18/6'),
- -> (3494, 'Аккумулятор секционный СА4М-18/9'),
- -> (3495, 'Аккумулятор секционный СА4М-50/1'),
- -> (3496, 'Аккумулятор секционный СА4М-50/2'),
- -> (3497, 'Аккумулятор мобильный узкий А4Ц-18/1'),
- -> (3498, 'Аккумулятор мобильный узкий А4Ц-18/2'),
- -> (3501, 'Аккумулятор мобильный узкий А4Ц-18/3-И-С'),
- -> (3502, 'Аккумулятор мобильный узкий А4Ц-18/4'),
- -> (3503, 'Аккумулятор мобильный широкий А4Ц-04А/1'),
- -> (3504, 'Аккумулятор мобильный широкий А4Ц-04А/2'),
- -> (3505, 'Аккумулятор мобильный широкий А4Ц-04А/3'),
- -> (3506, 'Аккумулятор мобильный широкий А4Ц-04А/4'),
- -> (3507, 'Аккумулятор мобильный широкий А4Ц-18А/1'),
- -> (3508, 'Аккумулятор мобильный широкий А4Ц-18А/1_КП'),
- -> (3509, 'Аккумулятор мобильный широкий А4Ц-18А/2'),
- -> (3510, 'Аккумулятор мобильный широкий А4Ц-18А/3'),
- -> (3511, 'Аккумулятор мобильный широкий А4Ц-18А/3_КП'),
- -> (3512, 'Аккумулятор мобильный широкий А4Ц-18А/4'),
- -> (3513, 'Аккумулятор мобильный широкий А4Ц-18А/4_КП'),
- -> (3514, 'Аккумулятор мобильный широкий А4Ц-18А/5'),
- -> (3515, 'Аккумулятор мобильный широкий А4Ц-18А/6'),
- -> (3516, 'Аккумулятор мобильный широкий А4Ц-18А/7'),
- -> (3517, 'Аккумулятор мобильный широкий А4Ц-18А/8'),
- -> (3518, 'Аккумулятор мобильный широкий А4Ц-40/1'),
- -> (3519, 'Аккумулятор мобильный широкий А4Ц-40/2');
- Query OK, 34 rows affected (0.00 sec)
- Records: 34 Duplicates: 0 Warnings: 0
- mysql>
- mysql> select * from tsttable order by dsc;
- +------+--------------------------------------------+
- | id | dsc |
- +------+--------------------------------------------+
- | 3497 | Аккумулятор мобильный узкий А4Ц-18/1 |
- | 3498 | Аккумулятор мобильный узкий А4Ц-18/2 |
- | 3499 | Аккумулятор мобильный узкий А4Ц-18/3 |
- | 3500 | Аккумулятор мобильный узкий А4Ц-18/3-И |
- | 3501 | Аккумулятор мобильный узкий А4Ц-18/3-И-С |
- | 3502 | Аккумулятор мобильный узкий А4Ц-18/4 |
- | 3503 | Аккумулятор мобильный широкий А4Ц-04А/1 |
- | 3504 | Аккумулятор мобильный широкий А4Ц-04А/2 |
- | 3505 | Аккумулятор мобильный широкий А4Ц-04А/3 |
- | 3506 | Аккумулятор мобильный широкий А4Ц-04А/4 |
- | 3507 | Аккумулятор мобильный широкий А4Ц-18А/1 |
- | 3508 | Аккумулятор мобильный широкий А4Ц-18А/1_КП |
- | 3509 | Аккумулятор мобильный широкий А4Ц-18А/2 |
- | 3510 | Аккумулятор мобильный широкий А4Ц-18А/3 |
- | 3511 | Аккумулятор мобильный широкий А4Ц-18А/3_КП |
- | 3512 | Аккумулятор мобильный широкий А4Ц-18А/4 |
- | 3513 | Аккумулятор мобильный широкий А4Ц-18А/4_КП |
- | 3514 | Аккумулятор мобильный широкий А4Ц-18А/5 |
- | 3515 | Аккумулятор мобильный широкий А4Ц-18А/6 |
- | 3516 | Аккумулятор мобильный широкий А4Ц-18А/7 |
- | 3517 | Аккумулятор мобильный широкий А4Ц-18А/8 |
- | 3518 | Аккумулятор мобильный широкий А4Ц-40/1 |
- | 3519 | Аккумулятор мобильный широкий А4Ц-40/2 |
- | 3486 | Аккумулятор секционный СА4М-18/1 |
- | 3487 | Аккумулятор секционный СА4М-18/10 |
- | 3488 | Аккумулятор секционный СА4М-18/12 |
- | 3489 | Аккумулятор секционный СА4М-18/2 |
- | 3490 | Аккумулятор секционный СА4М-18/3 |
- | 3491 | Аккумулятор секционный СА4М-18/4 |
- | 3492 | Аккумулятор секционный СА4М-18/5 |
- | 3493 | Аккумулятор секционный СА4М-18/6 |
- | 3494 | Аккумулятор секционный СА4М-18/9 |
- | 3495 | Аккумулятор секционный СА4М-50/1 |
- | 3496 | Аккумулятор секционный СА4М-50/2 |
- +------+--------------------------------------------+
- 34 rows in set (0.00 sec)
- mysql> \q
Объяснение кода листинга программы
- Убедитесь, что вы работаете в MySQL и выполните команду
USE your_database
(если необходим выбор базы данных). - Создайте новую таблицу с помощью команды
CREATE TABLE tsttable (id INT AUTO_INCREMENT PRIMARY KEY, dsc VARCHAR(250) CHARACTER SET CP1251) ENGINE=INNODB DEFAULT CHARACTER SET=UTF8;
- Вставьте данные в таблицу с помощью команды
INSERT INTO tsttable (id, dsc) VALUES (3486, 'Аккумулятор секционный СА4М-18/1'), (3487, 'Аккумулятор секционный СА4М-18/10'), ... (3519, 'Аккумулятор мобильный широкий А4Ц-40/2');
- Отсортируйте данные в таблице по столбцу
dsc
с помощью командыSELECT * FROM tsttable ORDER BY dsc;
- Выполните команду
DROP TABLE tsttable;
для удаления таблицы (если необходимо). - Завершите SQL-сессию с помощью команды
\q
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д