Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Текстовое поле с условием UNIQUE
 
 автор: Gandzas   (29.11.2007 в 19:34)   письмо автору
 
 

Подскажите, пожалуйста, какой тип лучше присвоить полю в таблице, чтобы можно было хранить в нем текст более 256 символов и использовать условие UNIQUE

Сейчас это varchar(255), но в версиях, ниже 5-й не получается использовать varchar(1000).

   
 
 автор: Faraon   (29.11.2007 в 20:56)   письмо автору
 
   для: Gandzas   (29.11.2007 в 19:34)
 

Если текст, то используйте тип TEXT

   
 
 автор: Gandzas   (29.11.2007 в 21:17)   письмо автору
 
   для: Faraon   (29.11.2007 в 20:56)
 

типу text нельзя присвоить условие UNIQUE ((

   
 
 автор: Trianon   (29.11.2007 в 21:26)   письмо автору
 
   для: Gandzas   (29.11.2007 в 21:17)
 

UNIQUE - это не условие, а предписание создать уникальный индекс на этом поле.
Индексы в любом случае строятся на определенном числе первых символов поля. Просто для ключевых типов INT, CHAR, VARCHAR это число по умолчанию берется из объявления типа. А для TEXT его придется указывать в явном объявлении индекса.

Сделать индекс на неограниченном размере поля не получится по любому. Это физически невозможно.

   
 
 автор: Gandzas   (29.11.2007 в 22:14)   письмо автору
 
   для: Trianon   (29.11.2007 в 21:26)
 

>А для TEXT его придется указывать в явном объявлении индекса.
А как?

   
 
 автор: Trianon   (29.11.2007 в 22:56)   письмо автору
 
   для: 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 ) ) ; 

   
 
 автор: Gandzas   (29.11.2007 в 23:10)   письмо автору
 
   для: Trianon   (29.11.2007 в 22:56)
 

спасибо огромное. А до скольки байт (символов) можно увеличивать значение?


ALTER TABLE `tab1` ADD UNIQUE `TXT_UnIdx` ( `txt` ( 255 ) ) ; 


Так можно?

   
 
 автор: Trianon   (30.11.2007 в 00:04)   письмо автору
 
   для: Gandzas   (29.11.2007 в 23:10)
 

Попробуйте.
Даже если и получится - ничего хорошего от этого не выйдет.
Ключевая информация, чтобы она исполняла свое предназначение - быстрый поиск - должна быть короткой.

Два примера индексов из реальной жизни.

1. Книга - аналог базы данных . Оглавление, предметный указатель - аналоги индексов.
Представьте себе, что в оглавлении, вместо названий разделов и глав, напечатаны сами главы. Или даже первые абзацы глав. Вы замучитесь что-нибудь искать в такой книге.

2. Адреса домов. Фактически это записи индекса таблицы с домами.
Представьте, что Вы едете по улице, и вместо коротенькой таблички (Названия улицы и номера дома) Вам придется читать длинющий список лиц, которые в этом доме живут?

   
 
 автор: Gandzas   (30.11.2007 в 00:13)   письмо автору
 
   для: Trianon   (30.11.2007 в 00:04)
 

Скрипт будет работать исключительно на локалке. Выполняется быстро. Записей в таблице с этим полем всегда не более 100. Задача была не допустить 100% совпадений в тексте при записи в БД. Попробовала. Получилось. Спасибо.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования