|
|
|
| Подскажите, пожалуйста, какой тип лучше присвоить полю в таблице, чтобы можно было хранить в нем текст более 256 символов и использовать условие UNIQUE
Сейчас это varchar(255), но в версиях, ниже 5-й не получается использовать varchar(1000). | |
|
|
|
|
|
|
|
для: Gandzas
(29.11.2007 в 19:34)
| | Если текст, то используйте тип TEXT | |
|
|
|
|
|
|
|
для: Faraon
(29.11.2007 в 20:56)
| | типу text нельзя присвоить условие UNIQUE (( | |
|
|
|
|
|
|
|
для: Gandzas
(29.11.2007 в 21:17)
| | UNIQUE - это не условие, а предписание создать уникальный индекс на этом поле.
Индексы в любом случае строятся на определенном числе первых символов поля. Просто для ключевых типов INT, CHAR, VARCHAR это число по умолчанию берется из объявления типа. А для TEXT его придется указывать в явном объявлении индекса.
Сделать индекс на неограниченном размере поля не получится по любому. Это физически невозможно. | |
|
|
|
|
|
|
|
для: Trianon
(29.11.2007 в 21:26)
| | >А для TEXT его придется указывать в явном объявлении индекса.
А как? | |
|
|
|
|
|
|
|
для: Gandzas
(29.11.2007 в 22:14)
| | Этот оператор создает таблицу
CREATE TABLE `tab1` (
`id` INT( 11 ) NOT NULL ,
`txt` TEXT NULL
);
|
Эти две строки честно создают первичный ключ (это тоже вид индекса) на поле id.
ALTER TABLE `tab1` ADD PRIMARY KEY ( `id` ) ;
ALTER TABLE `tab1` CHANGE `id` `id` INT( 11 ) NOT NULL AUTO_INCREMENT ;
|
Эта строчка создает уникальный индекс с именем TXT_UnIdx на первых десяти байтах поля txt
После этого, добавить строки, в которых первые 10 символов поля txt будут содержать одинаковые подстроки, станет невозвможно.
ALTER TABLE `tab1` ADD UNIQUE `TXT_UnIdx` ( `txt` ( 10 ) ) ;
|
| |
|
|
|
|
|
|
|
для: Trianon
(29.11.2007 в 22:56)
| | спасибо огромное. А до скольки байт (символов) можно увеличивать значение?
ALTER TABLE `tab1` ADD UNIQUE `TXT_UnIdx` ( `txt` ( 255 ) ) ;
|
Так можно? | |
|
|
|
|
|
|
|
для: Gandzas
(29.11.2007 в 23:10)
| | Попробуйте.
Даже если и получится - ничего хорошего от этого не выйдет.
Ключевая информация, чтобы она исполняла свое предназначение - быстрый поиск - должна быть короткой.
Два примера индексов из реальной жизни.
1. Книга - аналог базы данных . Оглавление, предметный указатель - аналоги индексов.
Представьте себе, что в оглавлении, вместо названий разделов и глав, напечатаны сами главы. Или даже первые абзацы глав. Вы замучитесь что-нибудь искать в такой книге.
2. Адреса домов. Фактически это записи индекса таблицы с домами.
Представьте, что Вы едете по улице, и вместо коротенькой таблички (Названия улицы и номера дома) Вам придется читать длинющий список лиц, которые в этом доме живут? | |
|
|
|
|
|
|
|
для: Trianon
(30.11.2007 в 00:04)
| | Скрипт будет работать исключительно на локалке. Выполняется быстро. Записей в таблице с этим полем всегда не более 100. Задача была не допустить 100% совпадений в тексте при записи в БД. Попробовала. Получилось. Спасибо. | |
|
|
|