Zapis polskich literek w bazie danych US7ASCII z bazy EE8ISO8859P2
stacho@tls.pl - 06-02-2007 00:04
Zapis polskich literek w bazie danych US7ASCII z bazy EE8ISO8859P2
Witam,
Mamy dwie bazy danych. Jedna skonfigurowana jako EE8ISO8859P2, druga jako US7ASCII (NLS_CHARACTERSET). Dla obu mamy NLS_LANGUAGE POLISH i NLS_TERRITORY POLAND.
Obie to Oracle 9.2.0.6.0. Z bazy EE8ISO8859P2 mamy dblink do bazy US7ASCII.
Chcemy zapisywaæ polskie znaczki z poziomu bazy EE8ISO8859P2 w bazie US7ASCII. Niestety przy próbie zapisu Oracle automatycznie konwertuje polskie znaczki z "£" -> "L", "¡" -> "A" itp. Przyk³adowo:
UPDATE table@dblink SET name = '¡±ÊêÓó¡±£³¯¿¬¼ÆæÑñ' WHERE customer_id=1000;
Powoduje zapisanie w bazie ci±gu "AaEeOoAaLlZzZzCcNn".
Uda³o mi siê znale¼æ trikowe rozwi±zanie, które dzia³a, ale wymaga dodania kodu dla ka¿dej operacji i pola. Nie wydaje siê to ani zbyt eleganckie, ani wygodne (poni¿ej kod w PL/SQL). Pytanie: Czy da siê ten problem rozwi±zaæ zmieniaj±c ustawienia sesji/bazy danych, bez rêcznego modyfikowania ka¿dej operacji np. wy³±czaj±c automatyczn± konwersjê znaków ?
DECLARE dataToSave VARCHAR(2000) := ' ¡±ÊêÓó¡±£³¯¿¬¼ÆæÑñ.'; rawData RAW(2000);
BEGIN
SELECT utl_raw.CAST_TO_RAW(dataToSave) INTO rawData FROM DUAL; SELECT utl_raw.CONVERT(rawData, 'POLISH_POLAND.EE8MSWIN1250', 'polish_poland.ee8iso8859p2' ) INTO rawData FROM dual;
UPDATE table@dblink SET name = utl_raw.cast_to_varchar2@bscs.world(rawData) WHERE customer_id=1000;
END;
Pozdrawiam Stacho
Lucyna Witkowska - 07-02-2007 00:05
stacho@tls.pl napisa³: > Mamy dwie bazy danych. Jedna skonfigurowana jako EE8ISO8859P2, druga > jako US7ASCII (NLS_CHARACTERSET). Dla obu mamy NLS_LANGUAGE POLISH i > NLS_TERRITORY > POLAND. (...) > Czy da siê ten problem rozwi±zaæ zmieniaj±c ustawienia sesji/bazy > danych, bez rêcznego modyfikowania ka¿dej operacji np. wy³±czaj±c > automatyczn± konwersjê znaków ?
Jedyne ca³o¶ciowe rozwi±zanie problemu to zmiana CHARACTERSET w bazie z US7ASCII na inny pozwalajacy na prawid³owe trzymanie polskich znaków (EE8ISO8859P2, EE8MSWIN1250, UTF8 itd).
Nawet jesli za pomoca trikow wpisze sie do bazy US7ASCII znaki ± - to bêd± one traktowane tam jako znaki obce i na kolumnach z tymi znakami nie bed± dzialac poprawnie ani ORDER BY, ani funkcje UPPER, LOWER itd.
Pozdrowienia, LW
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[laik]Jak =?ISO-8859-2?Q?stworzy=E6/zaczac_tworzyc__ma=B3=B1?==?ISO-8859-2?Q?__baz=EA_danych_na_potrzeby_www=3F?=
[mysql] przenoszenie danych =?ISO-8859-2?Q?mi=EAdzy_tabelami_?==?ISO-8859-2?Q?w_r=F3=BFnych_bazach?=
Ksiazka - "Podstawowy =?ISO-8859-2?Q?wyk=B3ad_z_system=F3w_?==?ISO-8859-2?Q?baz_danych=22?=
Zrywanie =?ISO-8859-2?Q?po=B3aczen_z_baza_danych_-_pos?==?ISO-8859-2?Q?tgresql_=3C-=3E_odbc?=
=?iso-8859-2?Q?=5BSQL_Server_2000=5D_uprawnienienia_do_u=BFyw ania_widoku_?==?iso-8859-2?Q?opartego_na_tabeli_z_innej_bazy?=
Dwie bazy czy dwie tabele?
[PHP i MySQL] Wstawianie =?ISO-8859-2?Q?rekord=F3w_do_bazy_?==?ISO-8859-2?Q?a_z=B3e_kodowanie?=
[mssql] insert do tabeli na podstawie danych z innej tabeli
=?ISO-8859-2?Q?=5Bmysql=5D_synchronizacja_struktury_bazy_?==? ISO-8859-2?Q?lokalnej_ze_zdaln=B1?=
[oracle] Baza danych do kursy Introduction to Oracle9i:PL/SQL ? Sk±d j± pobraæ ?
zanotowane.pldoc.pisz.plpdf.pisz.plquentinho.opx.pl
Cytat
Decede mihi sole - nie zas³aniaj mi s³onca. Gdy kogo¶ kochasz, jeste¶ jak stworzyciel ¶wiata - na cokolwiek spojrzysz, nabiera to kszta³tu, wype³nia siê barw±, ¶wiat³em. Powietrze przytula siê do ciebie, choæby by³ mróz, a ty masz w sobie tyle rado¶ci, ¿e musisz j± rozdawaæ woko³o, bo siê w tobie nie mie¶ci Hoc fac - tak czyñ. A tergo - od ty³u; z ty³u. I czarne w³osy posiwiej±. Safona |
|