Fórum Root.cz

Hlavní témata => Server => Téma založeno: hknmtt 30. 10. 2022, 15:59:26

Název: SQLite a utf8mb4_unicode_ci collation
Přispěvatel: hknmtt 30. 10. 2022, 15:59:26
Skusam pouzit SQLite namiesto MySQL/MariaDB, konkretne https://pkg.go.dev/modernc.org/sqlite, a hadze mi to pri spusteni error ze nepozna collation utf8mb4_unicode_ci. Moc sa mi nedari najst na webe o tom nic. Neviete niekto ci tam skratka nie je podpora alebo treba nejak uprvit dsn(skusal som encoding=utf8mb4_unicode_ci ale bez vysledku)?
Název: Re:SQLite a utf8mb4_unicode_ci collation
Přispěvatel: Filip Jirsák 30. 10. 2022, 16:42:33
Proč si myslíte, že by SQLite mělo podporovat věc specifickou pro MySQL/MariaDB?
Název: Re:SQLite a utf8mb4_unicode_ci collation
Přispěvatel: _Tomáš_ 30. 10. 2022, 17:58:52
Jak píše Filip, chceš něco, co je pouze v MySQL/Mariadb.

Pokud chceš v sqlite hledat s ci (case insensitive), použij COLLATE NOCASE, viz https://www.sqlite.org/datatype3.html#collating_sequences. UTF8 používá sqlite ve výchozím stavu, stejně tak unicode.
Název: Re:SQLite a utf8mb4_unicode_ci collation
Přispěvatel: hknmtt 30. 10. 2022, 18:20:45
Jak píše Filip, chceš něco, co je pouze v MySQL/Mariadb.

Pokud chceš v sqlite hledat s ci (case insensitive), použij COLLATE NOCASE, viz https://www.sqlite.org/datatype3.html#collating_sequences. UTF8 používá sqlite ve výchozím stavu, stejně tak unicode.

tam ide o to ze create table schema to ma a ja kvoli sqlite nebudem editovat schemu. len som chcel zmenit backend z mysql za sqlite ale asi to teda nejde...jedine ze by to vedelo sqlite ignorovat?
Název: Re:SQLite a utf8mb4_unicode_ci collation
Přispěvatel: Filip Jirsák 30. 10. 2022, 18:56:58
Když používáte nestandardní rozšíření MySQL, na jiné databázi to fungovat nebude. Na druhou stranu často se používají věci specifické pro danou databázi, takže pokud chcete podporovat víc různých databází, musíte mít i přizpůsobené SQL dotazy.
Název: Re:SQLite a utf8mb4_unicode_ci collation
Přispěvatel: JmJ 30. 10. 2022, 19:02:21
Bohuzel SQL neni uplne standardizovane, nektere veci si jednotlive DB resi bohuzel po svem. Pokud chces mit moznost uzivat vice backendu, pak bud musis nektere veci resit zavisle na db nebo musis uzit hruzy jako EntityFramework.

Název: Re:SQLite a utf8mb4_unicode_ci collation
Přispěvatel: Death Walker 31. 10. 2022, 13:35:18
V mysql je utf8 alias k utf8mb3 (max 3 byte na znak, deprecated). Preto ak sa chce pouzit plna utf8 tak treba pouzit utf8mb4 (max 4 byte na znak). V ziadnej inej db to takto blbo riesene nie je, preto to ziadna db nepozna.

Polozit si mysql ako standart a dodatocne k nemu ohybat pripojenie k inym sql db je skutocne zly napad.
Název: Re:SQLite a utf8mb4_unicode_ci collation
Přispěvatel: BoneFlute 31. 10. 2022, 15:39:36
Jak píše Filip, chceš něco, co je pouze v MySQL/Mariadb.

Pokud chceš v sqlite hledat s ci (case insensitive), použij COLLATE NOCASE, viz https://www.sqlite.org/datatype3.html#collating_sequences. UTF8 používá sqlite ve výchozím stavu, stejně tak unicode.

tam ide o to ze create table schema to ma a ja kvoli sqlite nebudem editovat schemu.

No to teda budete :-)
Název: Re:SQLite a utf8mb4_unicode_ci collation
Přispěvatel: hknmtt 31. 10. 2022, 16:05:22
V mysql je utf8 alias k utf8mb3 (max 3 byte na znak, deprecated). Preto ak sa chce pouzit plna utf8 tak treba pouzit utf8mb4 (max 4 byte na znak). V ziadnej inej db to takto blbo riesene nie je, preto to ziadna db nepozna.

Polozit si mysql ako standart a dodatocne k nemu ohybat pripojenie k inym sql db je skutocne zly napad.

Ja som pocital s tym ze sqlite to proste odignoruje ked to nepozna. Anyway, toto je na CDN server kde je mysql zbytocna a kvdb bola prilis krkolomna kvoli zopar indexom co potrebujem takze na koniec najskor upravim to sql pre sqlite. Toto bola len skuska na rychlo ze ci to zbehne.
Název: Re:SQLite a utf8mb4_unicode_ci collation
Přispěvatel: Filip Jirsák 31. 10. 2022, 16:26:49
V ziadnej inej db to takto blbo riesene nie je
Chtěl jsem namítnout Oracle DB, ale uznávám, tam je to ještě horší ;-)

Ja som pocital s tym ze sqlite to proste odignoruje ked to nepozna.
To je další zlozvyk z MySQL. Ta se takhle při vytváření schématu chová (aspoň to tak platilo dříve) – aby mohla akceptovat příkazy podle SQL standardu, spoustu částí příkazů ignorovala („FOREIGN KEY – v MySQL nedělá nic, ale příkaz je implementován kvůli kompatibilitě s SQL jiných databází“). Jiné databáze to ale nedělají a v SQL příkazech akceptují jenom to, čemu rozumí a co umí.
Název: Re:SQLite a utf8mb4_unicode_ci collation
Přispěvatel: Death Walker 31. 10. 2022, 18:17:40
Chtěl jsem namítnout Oracle DB, ale uznávám, tam je to ještě horší ;-)

Tak ono ani nejde tak o to pomenovanie, ale o to ze nemozete napisat proste utf8, pretoze je to alias k utf8mb3. Poste mysql utf8 != standartne utf8, standartne utf8 == mysql utf8mb4.
Název: Re:SQLite a utf8mb4_unicode_ci collation
Přispěvatel: Death Walker 31. 10. 2022, 18:26:45
Ja som pocital s tym ze sqlite to proste odignoruje ked to nepozna.

Tak, to ani nikdo nechce aby to ignorovala. Ak sa niekto preklepne, a miesto utf8 tam napise urf8, tak clovek caka ze to hodi chybu, nie to v tichosti prejde a pouzije systemove nastavenie, ktore bude pravdepodobne utf8, ale nie je to zarucene.
Název: Re:SQLite a utf8mb4_unicode_ci collation
Přispěvatel: hknmtt 31. 10. 2022, 23:06:19
Ja som pocital s tym ze sqlite to proste odignoruje ked to nepozna.

Tak, to ani nikdo nechce aby to ignorovala. Ak sa niekto preklepne, a miesto utf8 tam napise urf8, tak clovek caka ze to hodi chybu, nie to v tichosti prejde a pouzije systemove nastavenie, ktore bude pravdepodobne utf8, ale nie je to zarucene.

jasne, bolo to dost naivne si to mysliet.
Název: Re:SQLite a utf8mb4_unicode_ci collation
Přispěvatel: Tomáš Procházka 01. 11. 2022, 10:28:04
Ono celkově se SQLite chová jinak, než MySQL. Obecně, různé SQL systémy se chovají různě.
Například VARCHAR, pokud si dobře pamatuji, tak se ořezává (nebo jen někde, a jinde to vrací chybu?).
Každopádně SQLite má VARCHAR jen jako alias k TEXT, takže ta délka se neomezí. A to poravdu jen škrtáme povrch.
https://www.sqlite.org/datatype3.html#affinity_name_examples