|
Страници по тази тема: 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.
| |
|
само да попитам, щото може да се бъркам ...
като правиш 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: 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...
| |
|
ами нещо трябва да си изпуснал при цялата тая история
няма как да вкараш Иванов и иванов без полето с името да ти е двоично
т.е. според мене има 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 | >> (покажи всички)
|
|
|