powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Какая максимальная длина и как сделать уникальный индекс varchar?
15 сообщений из 15, страница 1 из 1
Какая максимальная длина и как сделать уникальный индекс varchar?
    #39888112
Фотография sc2r2bey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всегда считал, что длина 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
Какая максимальная длина и как сделать уникальный индекс varchar?
    #39888130
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sc2r2bey,

Покажите DDL таблицы и индекса.
...
Рейтинг: 0 / 0
Какая максимальная длина и как сделать уникальный индекс varchar?
    #39888144
Фотография sc2r2bey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я делал на 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
Какая максимальная длина и как сделать уникальный индекс varchar?
    #39888145
Фотография sc2r2bey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а саму таблицу сделал так
Код: 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
Какая максимальная длина и как сделать уникальный индекс varchar?
    #39888152
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sc2r2bey,

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

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

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

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

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

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

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


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