🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.delphi.bazy-danych
2 messages
2 total messages Started by J-23 Sun, 18 May 2014 14:51
UTF8 Wielkość pola VARCHAR Firebird
#82089
Author: J-23
Date: Sun, 18 May 2014 14:51
42 lines
2677 bytes
Witam,
Rzecz którą opisze ma miejsce przy pisaniu projektu w javie ale dotyczy 
kodowania w UTF8 w bazie firebird.

rzecz całą opisałem w tym wątku:
http://tracker.firebirdsql.org/browse/JDBC-355

Krótko nakreślę ile bajtów zakodowanych w UTF8 zajmie zakładając 
maksymalną wielkość pola zadeklarowanego jako VARCHAR(6) z tego co 
wyczytałem na stronie IBExpert (strona jest podana w tym wątku do 
którego podałem link) silnik firebirda wypadku pola VARCHAR jego 
wielkość podaną mnoży przez 4 co sprawdziłem zapytaniem na tabeli 
opisanej w wątku pod linkiem (jest tam cała struktura tabeli) co daję 
według tego 24 bajty. Dobrze zrozumiałem?

select
b.rdb$field_name as field,
c.rdb$field_length as length,
a.rdb$relation_name as table_name
from rdb$relations a
inner join rdb$relation_fields b on a.rdb$relation_name = 
b.rdb$relation_name
inner join rdb$fields c on b.rdb$field_source = c.rdb$field_name
where a.rdb$system_flag = 0 and a.rdb$relation_name='OSOBY' and 
b.rdb$field_name='KOD'

Pytam bo mam problem z zapytaniem: SELECT * FROM (SELECT id_osoby, imie, 
nazwisko, adres, kod, miasto, telefon ,email, COALESCE(przedstawiciel,0) 
AS przedstawiciel, COALESCE(wlasciciel,0) AS wlasciciel, 
COALESCE(ekspert,0) AS ekspert, COALESCE(dystrybutor,0) AS dystrybutor, 
uwagi FROM osoby ) WHERE imie LIKE '%TestA%' OR nazwisko LIKE '%TestA%' 
OR adres LIKE '%TestA%' OR kod LIKE '%TestA%' OR miasto LIKE '%TestA%' 
OR telefon LIKE '%TestA%'

Pomińmy proszę aspekt wydajności

całość się rozchodzi o pole KOD autor JDBC twierdzi że przy frazie 
%TestA% (7 bajtów) jest ono za duże w stosunku do pola kod które jest 
zadeklarowane jako VARCHAR(6) ale skoro jak już wspomniałem jest ono 
mnożone przez 4 wiec maksymalna fraza może być 24 bajty, dobrze rozumiem?

Pozdrawiam
Re: UTF8 Wielkość pola VARCHAR Firebird
#82101
Author: Arivald
Date: Sun, 18 May 2014 16:26
61 lines
3643 bytes
On 2014-05-18 16:51, J-23 wrote:
> Witam,
> Rzecz którą opisze ma miejsce przy pisaniu projektu w javie ale dotyczy
> kodowania w UTF8 w bazie firebird.
>
> rzecz całą opisałem w tym wątku:
> http://tracker.firebirdsql.org/browse/JDBC-355
>
> Krótko nakreślę ile bajtów zakodowanych w UTF8 zajmie zakładając
> maksymalną wielkość pola zadeklarowanego jako VARCHAR(6) z tego co
> wyczytałem na stronie IBExpert (strona jest podana w tym wątku do
> którego podałem link) silnik firebirda wypadku pola VARCHAR jego
> wielkość podaną mnoży przez 4 co sprawdziłem zapytaniem na tabeli
> opisanej w wątku pod linkiem (jest tam cała struktura tabeli) co daję
> według tego 24 bajty. Dobrze zrozumiałem?
>
> select
> b.rdb$field_name as field,
> c.rdb$field_length as length,
> a.rdb$relation_name as table_name
> from rdb$relations a
> inner join rdb$relation_fields b on a.rdb$relation_name =
> b.rdb$relation_name
> inner join rdb$fields c on b.rdb$field_source = c.rdb$field_name
> where a.rdb$system_flag = 0 and a.rdb$relation_name='OSOBY' and
> b.rdb$field_name='KOD'
>
> Pytam bo mam problem z zapytaniem: SELECT * FROM (SELECT id_osoby, imie,
> nazwisko, adres, kod, miasto, telefon ,email, COALESCE(przedstawiciel,0)
> AS przedstawiciel, COALESCE(wlasciciel,0) AS wlasciciel,
> COALESCE(ekspert,0) AS ekspert, COALESCE(dystrybutor,0) AS dystrybutor,
> uwagi FROM osoby ) WHERE imie LIKE '%TestA%' OR nazwisko LIKE '%TestA%'
> OR adres LIKE '%TestA%' OR kod LIKE '%TestA%' OR miasto LIKE '%TestA%'
> OR telefon LIKE '%TestA%'
>
> Pomińmy proszę aspekt wydajności
>
> całość się rozchodzi o pole KOD autor JDBC twierdzi że przy frazie
> %TestA% (7 bajtów) jest ono za duże w stosunku do pola kod które jest
> zadeklarowane jako VARCHAR(6) ale skoro jak już wspomniałem jest ono
> mnożone przez 4 wiec maksymalna fraza może być 24 bajty, dobrze rozumiem?
>
> Pozdrawiam
>

Dla UTF-8 to jest maksymalnie x4, ale dla języków europejskich 
przeciętnie x1,2. Tym niemniej program zakłada maksymalny bufor.

Problem w tyk kto i gdzie potrzebuje tych bajtów. Czy to wymóg protokołu 
FB? Czy może jedynie komponentów po stronie Delphi?

A co do '%TestA%' i wielkości pola.... przecież to nie ma znaczenia. 
'%TestA%' to część SQLa, a nie danych.

W każdym bądź razie jest to wielka wada FB czy komponentów do niego, że 
mieszają bajty ze znakami. Już dziesięć lat temu to było passe, a 
dzisiaj to po prostu nie do pomyślenia. To nie powinno mieć miejsca, dla 
pola varchar(6) dataset powinien przyjmować 6 znaków.

-- 
Arivald
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads