Autor Téma: Varchar - nemôžem zapísať maximálny počet znakov.  (Přečteno 5698 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 7430
  • Karma: 44
    • Verze Delphi: W11 + D11.3.1
Pri Varchar(35) môžem zapísať len 8 znakov. Pri Varchar(100) to bolo 30 - 35 znakov.
Urobil som zálohu a obnovu. Spustil všetky opravy (len či zbehli?). Problém pretrváva.
Win11 64b, Delphi 12.2, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3534
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Varchar - nemôžem zapísať maximálny počet znakov.
« Odpověď #1 kdy: 21-01-2013, 11:05:04 »
Pri Varchar(35) môžem zapísať len 8 znakov. Pri Varchar(100) to bolo 30 - 35 znakov.
Urobil som zálohu a obnovu. Spustil všetky opravy (len či zbehli?). Problém pretrváva.
No a necpes tam UTF8 nebo nejaky jiny multibyte? Ja presne nevim, jak se konkretne ptak ohnivak chova, protoze mi z historickych duvodu pouzivame WIn1250 a nehodlame to menut, ale uz jsem se pred lety u nejake DB (MySQL?) setkal, ze mela problemy length vs. size pri UTF8, jen si uz nepamatuju, o co slo.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 7430
  • Karma: 44
    • Verze Delphi: W11 + D11.3.1
Re:Varchar - nemôžem zapísať maximálny počet znakov.
« Odpověď #2 kdy: 21-01-2013, 11:18:31 »
Áno je tam UTF8 (zabudol som to napísať). Lenže doteraz to fungovalo.
Jeden problém je, že pri vytvorení TIBDataset nahadzuje dvojnásobnú dĺžku znaku a treba ju ručne dodatočne opravovať.

Skúsim to zmeniť na Win1250. Mne je to v podstate jedno. A unicode určite nebude požadovaný.
Tak Win1250 nemá problém. Pokiaľ nebude iná rada, tak to všetko zmením.
« Poslední změna: 21-01-2013, 11:21:17 od Stanislav Hruška »
Win11 64b, Delphi 12.2, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3534
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Varchar - nemôžem zapísať maximálny počet znakov.
« Odpověď #3 kdy: 21-01-2013, 12:18:21 »
Áno je tam UTF8 (zabudol som to napísať). Lenže doteraz to fungovalo.
Mam dojem, ze me to taky nekdy slo a nekdy ne, ale HOSIP. Jedine co vim, ze se to urcite netykalo Ptaka Ohnivaka a nejspis to bylo, kdyz jsem participoval na OSS projektu, ktery delal evoluci DB schematu podobne, jako ji ma RoR nebo jak jsem nedavno zjistil, nove i EntityFramework (http://www.youtube.com/watch?v=dqZRMvnjcfA&feature=player_detailpage), akorat ze tomu rikaji migrace, aby se to nepletlo

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 7430
  • Karma: 44
    • Verze Delphi: W11 + D11.3.1
Re:Varchar - nemôžem zapísať maximálny počet znakov.
« Odpověď #4 kdy: 22-01-2013, 08:50:02 »
Ja som z toho jeleň.
Chcel som zmeniť všetky ostatné domény typu VARCHAR na WIN1250. Vždy som dostal oznam (okrem Varchar(35)? ), že musím zadať najmenej xy znakov. Vždy to bol štvornásobok nastavenej hodnoty. Napr. pre VARCHAR(10) požadoval 40.

Tak som skúsil zmeniť nastavenie DB na WIN1250 (registračné údaje). A zrazu nie je problém zadať určený počet znakov. Ale zmeniť kódovú stránku pre domény nejde. Ten problém tam ostal. Všetky kontroly hlásili, že DB je v poriadku.

Používam IBExpert.
Win11 64b, Delphi 12.2, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.

Offline KarelHorky

  • Hrdina
  • ****
  • Příspěvků: 299
  • Karma: 10
    • Verze Delphi: XE6, Delphi 10.2 Tokyo
Re:Varchar - nemôžem zapísať maximálny počet znakov.
« Odpověď #5 kdy: 23-01-2013, 08:20:00 »
Ve vytvořené databázi nejde změnit Code Page. Celou databázi si vytvoř znovu. U Firebirdu se musí předem rozmyslet, jakou chceš Code Page a pak ji důsledně dodržovat, při připojení k DB i v doménách.
Ještě k té požadované délce pro Varchar, pro uložení 1 znaku v UTF8 je v tabulce potřebné od dvou do čtyř znaků, závisí to od kódování až po konkrétní znak. Protože FB předem neví, jaké znaky tam budou, požaduje rovnou čtyřnásobnou velikost varchar. Pokud ti stačí Win1250, ukládá se to 1 ku 1 a nepotřebuješ žádné znaky navíc.

K.
Win10 Prof 64b, Firebird 2.5

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 7430
  • Karma: 44
    • Verze Delphi: W11 + D11.3.1
Re:Varchar - nemôžem zapísať maximálny počet znakov.
« Odpověď #6 kdy: 23-01-2013, 08:28:37 »
// Celou databázi si vytvoř znovu.

Tu mám problém. Potrebujem z pár tabuliek preniesť údaje. A to sa mi nepodarilo. Ako na to?

Ja by som sa rád dozvedel čo sa stalo, že to odrazu prestalo fungovať. Okrem toho skrátenia počtu znakov som iný problém nezaznamenal. Ale je pravda, že s DB skoro nič nerobím. Nerád by som sa toho dočkal znova.

Ak by sa tu našiel nejaký dobrodinec, tak by som mu tú DB poslal. Alebo ju sem hodil ako prílohu. Po spakovaní má 150 kB.
Win11 64b, Delphi 12.2, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.

Offline KarelHorky

  • Hrdina
  • ****
  • Příspěvků: 299
  • Karma: 10
    • Verze Delphi: XE6, Delphi 10.2 Tokyo
Re:Varchar - nemôžem zapísať maximálny počet znakov.
« Odpověď #7 kdy: 23-01-2013, 08:43:51 »
V IBExpertu máš u tabulky v menu Table nabídku Export data into script. Pri jednorázové akci je to použitelné. Skript si potom natáhneš do Script editoru v nové DB a spustíš.
Pak ještě existuje nástroj IBPump. Přenáší všechna data včetně blobů, i když je už starší, funguje výborně.
K.
Win10 Prof 64b, Firebird 2.5

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 7430
  • Karma: 44
    • Verze Delphi: W11 + D11.3.1
Re:Varchar - nemôžem zapísať maximálny počet znakov.
« Odpověď #8 kdy: 23-01-2013, 08:55:27 »
Vďaka.
Win11 64b, Delphi 12.2, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 7430
  • Karma: 44
    • Verze Delphi: W11 + D11.3.1
Re:Varchar - nemôžem zapísať maximálny počet znakov.
« Odpověď #9 kdy: 24-01-2013, 08:06:36 »
Naozaj výborný nástroj. Akurát to zlyhalo pri poslednej tabuľke s 2 poľami a 3 záznamami  :) . Pri zdrovej DB som pri UTF8 (nepozná ho) musel nastaviť WIN1250.
Ešte jedna otázočka (nehľadal som odpoveď). Dajú sa hromadne preniesť trigger a SP? Len nasmerovanie.
Win11 64b, Delphi 12.2, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.

Offline KarelHorky

  • Hrdina
  • ****
  • Příspěvků: 299
  • Karma: 10
    • Verze Delphi: XE6, Delphi 10.2 Tokyo
Re:Varchar - nemôžem zapísať maximálny počet znakov.
« Odpověď #10 kdy: 24-01-2013, 08:38:09 »
V IBExpertu je v menu Tools nabídka Extract metadata. Vlevo označíš vše, co chceš exportovat a pak to uložíš do souboru. Pak v nové DB natáhneš do skript editoru a spustíš.
K.
Win10 Prof 64b, Firebird 2.5