Гость
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Какая максимальная длина и как сделать уникальный индекс varchar? / 15 сообщений из 15, страница 1 из 1
12.11.2019, 15:34
    #39888112
sc2r2bey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какая максимальная длина и как сделать уникальный индекс varchar?
Всегда считал, что длина varchar не более 255
сейчас прочитал документацию выяснилось, что это у CHAR
у varchar
авторValues in VARCHAR columns are variable-length strings. The length can be specified as a value from 0 to 65,535. The effective maximum length of a VARCHAR is subject to the maximum row size (65,535 bytes, which is shared among all columns) and the character set used. See Section 8.4.7, “Limits on Table Column Count and Row Size”.

Сделала поле VARCHAR(512)
Хотел поставить уникальный индекс, но тут уперся в ошибку
авторSpecified key was too long; max key length is 3072 bytes
...
Рейтинг: 0 / 0
12.11.2019, 16:00
    #39888130
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какая максимальная длина и как сделать уникальный индекс varchar?
sc2r2bey,

Покажите DDL таблицы и индекса.
...
Рейтинг: 0 / 0
12.11.2019, 16:15
    #39888144
sc2r2bey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какая максимальная длина и как сделать уникальный индекс varchar?
я делал на yii2
Код: php
1.
$this->createIndex('idx_unique_queue_statuses', '{{%queue_statuses}}', ['s_name', 'c_name', 'c_id', 'a_type', 'direction', 'activation', 'c_state', 'control'], true);



получается мол создай индекс idx_unique_queue_statuses, таблицы queue_statuses по полям 's_name', 'c_name', 'c_id', 'a_type', 'direction', 'activation', 'c_state', 'control' и сделай их уникальными
...
Рейтинг: 0 / 0
12.11.2019, 16:16
    #39888145
sc2r2bey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какая максимальная длина и как сделать уникальный индекс varchar?
а саму таблицу сделал так
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
        $this->createTable('{{%queue_statuses}}', [

            'id'            => $this->primaryKey(),
            's_name'        => $this->string(512),
            'c_name'        => $this->string(512),
            'c_id'          => $this->string(32),
            'a_type'        => $this->string(128),
            'direction'     => $this->string(32),
            'activation'    => $this->string(32),
            'c_state'       => $this->string(32),
            'control'       => $this->string(32),
            //TODO <<<
            'created_at'    => $this->integer()->notNull(),

        ], $tableOptions);



типа делаю миграцию
...
Рейтинг: 0 / 0
12.11.2019, 16:33
    #39888152
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какая максимальная длина и как сделать уникальный индекс varchar?
sc2r2bey,

ну а длина элемента в индексе ограничена 3кб.
(512+512+32+128+32*4) = 1312 символов, домножаем на кодировку 3 байта на символ для utf8mb3 (вы ведь utf8 ставите?) и далеко уходим за верхний лимит.
...
Рейтинг: 0 / 0
12.11.2019, 16:43
    #39888154
sc2r2bey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какая максимальная длина и как сделать уникальный индекс varchar?
есть какие-то решения, я пока программно могу контролировать уникальность
...
Рейтинг: 0 / 0
12.11.2019, 16:53
    #39888164
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какая максимальная длина и как сделать уникальный индекс varchar?
sc2r2bey,

А зачем вам уникальный индекс из такого большого количества полей?
От этого зависят возможные варианты.
...
Рейтинг: 0 / 0
12.11.2019, 17:18
    #39888179
sc2r2bey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какая максимальная длина и как сделать уникальный индекс varchar?
для хранения исторических состояний данных
...
Рейтинг: 0 / 0
12.11.2019, 17:20
    #39888182
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какая максимальная длина и как сделать уникальный индекс varchar?
sc2r2bey
для хранения исторических состояний данных
Для хранения - это таблица. А индекс зачем? На все поля, да еще сразу уникальный?
...
Рейтинг: 0 / 0
13.11.2019, 08:56
    #39888394
sc2r2bey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какая максимальная длина и как сделать уникальный индекс varchar?
чтобы такая запись была одна, т.е. не дублировалась в бд
...
Рейтинг: 0 / 0
13.11.2019, 09:16
    #39888404
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какая максимальная длина и как сделать уникальный индекс varchar?
sc2r2bey
чтобы такая запись была одна, т.е. не дублировалась в бд
надо правильно подходить к построению базы, а не и решать в лоб.
...
Рейтинг: 0 / 0
13.11.2019, 09:36
    #39888415
sc2r2bey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какая максимальная длина и как сделать уникальный индекс varchar?
вадя
sc2r2bey
чтобы такая запись была одна, т.е. не дублировалась в бд
надо правильно подходить к построению базы, а не и решать в лоб.

буду признателен за рекомендации, я с таким впервые столкнулся
...
Рейтинг: 0 / 0
13.11.2019, 16:13
    #39888725
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какая максимальная длина и как сделать уникальный индекс varchar?
sc2r2bey
буду признателен за рекомендации, я с таким впервые столкнулся
надо знать что за данные, чтоб что-то советовать
...
Рейтинг: 0 / 0
13.11.2019, 17:26
    #39888744
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какая максимальная длина и как сделать уникальный индекс varchar?
sc2r2bey
чтобы такая запись была одна, т.е. не дублировалась в бд
Проверяйте записи при вставке самостоятельно.

В принципе индекс создать можно, но нужно уменьшить набор полей в ширину. Например, использовать префикс для строковых полей или помещать в индекс не само строковое значение, а только его хэш.
...
Рейтинг: 0 / 0
13.11.2019, 19:35
    #39888786
sc2r2bey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какая максимальная длина и как сделать уникальный индекс varchar?
miksoft
sc2r2bey
чтобы такая запись была одна, т.е. не дублировалась в бд
Проверяйте записи при вставке самостоятельно.

ну да так и делается, т.е. смотрится, если такая запись существует, т.е. 100% совпадение, запись не делается

В принципе индекс создать можно, но нужно уменьшить набор полей в ширину. Например, использовать префикс для строковых полей или помещать в индекс не само строковое значение, а только его хэш.

насчет хеша хорошая идея, тем более это исторические данные
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Какая максимальная длина и как сделать уникальный индекс varchar? / 15 сообщений из 15, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]