Autor Zpráva
AM_
Profil
Zdravím,
mám takový spíše teoretický dotaz. Datový typ SET v Mysql umožňuje výběr 0-n hodnot z množiny (dle manuálu, zero or more values). Přitom 0 vybraných hodnot je reprezentováno prázdným stringem. Jedna z možných hodnot SET může ale být právě prázdný string. Lze tedy nějak rozlišit, zda je vybrána právě hodnota "prázdný string", nebo žádná z množiny? Nebo jde o jeden z případů, kdy logika MySQL trochu pokulhává?
mohu mít totiž:

CREATE TABLE test(
  setWithEmpty SET ('a','b','c',''),
  setWithoutEmpty SET('a','b','c')
);

INSERT INTO test(setWithEmpty, setWithoutEmpty) VALUES ('', ''); -- jak se rozliší, zda se do sloupce setWithEmpty vybral prvek "prázdný string", nebo žádný prvek?

INSERT INTO test(setWithEmpty, setWithoutEmpty) VALUES ('a,', 'a,'); -- u setWithEmpty opravdu tuto hodnotu nastavit jde, u druhého sloupečku ne - prázdná hodnota v množině je tedy i pro MySQL něco jiného, než prázdná množina

Chápu, že v praxi asi málokdo používá prázdnou hodnotu v datovém typu SET, ale píšu databázový framework a měl bych rád jasno v tom, jak se to v různých případech chová a hlavně jak toto chování chápat...

Děkuji za odpovědi.
Tori
Profil
Šlo by nastavit ten sloupec na NULL a ze strany aplikace zajistit, aby se rozlišovala platná hodnota "" od nezadané/nedefinované hodnoty. Keďže data z formuláře přijdou vždy jako řetězec, muselo by se to nějak ošetřit - phpMyAdmin používá zaškrtávátka pro vložení nulové hodnoty.
Kajman
Profil
Myslím, že jim to pokulhává, první insert tam prázdnou hodnotu nevloží, druhý ano, ale find_in_set u druhého případu prázdný string nenajde. Asi by s tím musel pracovat framework jako s bitovými operacemi nad číslem.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: