Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 05:34 22.05.24 
Компютри и Интернет
   >> Бази данни
*Кратък преглед

Страници по тази тема: 1 | 2 | >> (покажи всички)
Тема MySQL -> UNIQUE (кирилица)  
Автор Dakota (erotoman)
Публикувано17.10.03 12:08



Случват ми се разни странни (за мен) неща днес.

Имам една табличка USER вътре с един primary key (id), един unique (username) и един обикновен index (other_id). Реших да променя обикновения key (other_id) на unique (other_id) - типът е bigint unsigned:

ALTER TABLE USER DROP INDEX OTHER_ID, ADD UNIQUE(OTHER_ID);

И MySQL изпищя:

ERROR 1062: Duplicate entry 'иванов' for key 2

Учудих се, защото знам, че other_id ми е bigint, и направих запитване за '%иванов%' (да знам, че така не използва индекса), и получих 2 резултата:
един username='Иванов' и един username='иванов'. При промяна на втория, пак изпищя при следващото такова разминаване на главни и малки кирилски букви. И така, въпросите ми са два:

1. Защо почва да прави проверка за key 2, при положение, че аз пипам key 3.

2. И по-важното...защо когато съм INSERT IGNORE-вал в таблицата, заявката е минала успешно без да се разсърди, че има duplication, а сега изведнъж реши, че главни и малки кирилски букви са едно и също?!

П.П.: Всъщност на първия въпрос и сам мога да си отговоря, но при втория положението не е такова.

Everything louder than everything else...

Редактирано от Dakota на 17.10.03 12:16.



Тема Re: MySQL -> UNIQUE (кирилица)нови [re: Dakota]  
Автор AcidMemory ()
Публикувано17.10.03 23:42



само да попитам, щото може да се бъркам ...

като правиш INSERT IGNORE, това не означава ли, че ако има грешка, просто няма да ти я хвърли (за да не се прецакаш), а ти ако се интересуваш какво е станало по rows affected можеш да познаеш влязъл ли е запис или не (но не и да вкарва запис-дубликат)



Тема Re: MySQL -> UNIQUE (кирилица)нови [re: Dakota]  
Автор salle (един такъв)
Публикувано18.10.03 01:52



2. И по-важното...защо когато съм INSERT IGNORE-вал в таблицата, заявката е минала успешно без да се разсърди, че има duplication, а сега изведнъж реши, че главни и малки кирилски букви са едно и също?!

Че нали IGNORE e точно за това???????
IGNORE = игнорирай всички грешки и продължавая нататък!



Тема Re: MySQL -> UNIQUE (кирилица)нови [re: AcidMemory]  
Автор Dakota (erotoman)
Публикувано18.10.03 02:36



Именно.

Everything louder than everything else...


Тема Re: MySQL -> UNIQUE (кирилица)нови [re: salle]  
Автор Dakota (erotoman)
Публикувано18.10.03 02:38



Да, INGORE не връща грешка, но и не вкарва записа, ако има нещо нередно. В случая, обаче, е влязъл успешно запис, т.е. веднъж проверката за duplicate е дала false, а сега ми даде true. Защо?

Everything louder than everything else...


Тема Re: MySQL -> UNIQUE (кирилица)нови [re: Dakota]  
Автор AcidMemory ()
Публикувано18.10.03 09:51



прати тогава цялата дефиниция на таблицата, както и дали си сменял и какви индекси си слагал (махал, променял, добавял)



Тема Re: MySQL -> UNIQUE (кирилица)нови [re: AcidMemory]  
Автор Dakota (erotoman)
Публикувано19.10.03 13:49



CREATE TABLE `USER` (

`USER_SID` int(10) unsigned NOT NULL auto_increment,
`COMPANY_SID` int(10) unsigned NOT NULL default '0',
`VISITOR_SID` bigint(20) unsigned NOT NULL default '0',
`USERNAME` varchar(100) NOT NULL default '',
`PASSWORD` varchar(32) NOT NULL default '',
`FIRST_NAME` varchar(30) NOT NULL default '',
`LAST_NAME` varchar(30) NOT NULL default '',
`PHONE` varchar(50) NOT NULL default '',
`FAX` varchar(30) NOT NULL default '',
`EMAIL` varchar(100) NOT NULL default '',
`ADDRESS` varchar(255) NOT NULL default '',
`OBJECT_HISTORY_SID` bigint(20) unsigned NOT NULL default '0',
`ACCESS` tinyint(3) unsigned NOT NULL default '1',
`VISIBLE_NAME` tinyint(4) NOT NULL default '0',
`VISIBLE_PHONE` tinyint(4) NOT NULL default '0',
`VISIBLE_FAX` tinyint(4) NOT NULL default '0',
`VISIBLE_EMAIL` tinyint(4) NOT NULL default '0',
`VISIBLE_ADDRESS` tinyint(4) NOT NULL default '0',
PRIMARY KEY (`USER_SID`),
UNIQUE KEY `USERNAME` (`USERNAME`),
UNIQUE KEY `OBJECT_HISTORY_SID` (`OBJECT_HISTORY_SID`),
KEY `COMPANY_SID` (`COMPANY_SID`),
KEY `VISITOR_SID` (`VISITOR_SID`)
) TYPE=MyISAM


Не мога да си спомня цялото history на table дефиницията. Възможно е, някои от VISIBLE_* полетата да не са съществували, но важното в случая е, че UNIQUE индекса върху USERNAME си съществува от самото начало на времето.

Тук OTHER_ID от първия ми постинг === OBJECT_HISTORY_SID.

Everything louder than everything else...

Тема Re: MySQL -> UNIQUE (кирилица)нови [re: Dakota]  
Автор AcidMemory ()
Публикувано20.10.03 10:28



ами нещо трябва да си изпуснал при цялата тая история
няма как да вкараш Иванов и иванов без полето с името да ти е двоично

т.е. според мене има 3 възможности
- първата горе (нещо да си изпуснал)
- да си хитнал някакъв бъг
- ако MySQL има възможност за при добавяне на такъв индекс да не форсва проверяването на данните и съответно при дропването и добавянето на уникалния ключ проверката да е била извършена



Тема Re: MySQL -> UNIQUE (кирилица)нови [re: AcidMemory]  
Автор Dakota (erotoman)
Публикувано20.10.03 11:16



Не знам какво може да съм изпуснал...данните си стоят на тази версия на MySQL от край време. Изобщо как е възможно два такива записа да се запишат. Както и да го извъртам, все предупреждението трябва да ми е било изкарано по-рано.

За третата възмоност, не разбрах какво имаш предвид? Аз просто смених OBJECT_HISTORY_SID от обикновен KEY, на UNIQUE KEY. USERNAME винаги си е било UNIQUE.

Everything louder than everything else...


Тема Re: MySQL -> UNIQUE (кирилица)нови [re: Dakota]  
Автор salle (един такъв)
Публикувано20.10.03 13:13



Ами може примерно таблицата да е била създадена с друг character-set




Страници по тази тема: 1 | 2 | >> (покажи всички)
*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.