Автоинкремент с N количеством нулей

224
11 ноября 2017, 11:46

Приветствую. Можно ли в Таблице Базы данных силами одного только SQL сделать, авто-инкрементируемый первичный ключ не просто вида 1,2,3 а такого 00001,00002,00003 и т.д. ?

Пробую создать таблицу с zerofill :

CREATE TABLE `t` (
  `number_tasks_id` int(5) zerofill NOT NULL AUTO_INCREMENT
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

на что sql выдает ошибку :

1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key

Answer 1

В mysql реализован дополнительный атрибут zerofill

mysql> create table zai (i int(5) zerofill auto_increment primary key, val int);
Query OK, 0 rows affected (0.09 sec)
mysql> insert into zai (val) values (1),(2),(3);
Query OK, 3 rows affected (0.04 sec)
Records: 3  Duplicates: 0  Warnings: 0
mysql> select * from zai;
+-------+------+
| i     | val  |
+-------+------+
| 00001 |    1 |
| 00002 |    2 |
| 00003 |    3 |
+-------+------+
3 rows in set (0.00 sec)

Впрочем, не рекомендую на него полагаться. У вас вопрос очевидно относится к вопросам вывода данных - вот при выводе форматировать и правильнее. Если очень хочется форматировать силами SQL - есть строковая функция lpad

mysql> select val, lpad(val, 5, '0') from zai;
+------+-------------------+
| val  | lpad(val, 5, '0') |
+------+-------------------+
|    1 | 00001             |
|    2 | 00002             |
|    3 | 00003             |
+------+-------------------+
READ ALSO
Вывод массива в list view

Вывод массива в list view

Я вывожу данные из SQLite при помощи слкода:

213
@Contract, аннотация к циклу

@Contract, аннотация к циклу

День добрый господа

204
После того как отправил нужные данные по сокету, его нужно закрывать?

После того как отправил нужные данные по сокету, его нужно закрывать?

То есть потом, для того что бы получить ещё данных просто заново открыть? Это не сильно нагружает сервер(открытие и закрытие сокетов)?

277