Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Unescapovani specijalni karakteri

[es] :: MySQL :: Unescapovani specijalni karakteri

[ Pregleda: 2166 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Milos Stojanovic
Belgrade

Član broj: 10343
Poruke: 1864
195.252.90.*

ICQ: 282954730
Sajt: www.sietf.org


+7 Profil

icon Unescapovani specijalni karakteri26.10.2006. u 18:11 - pre 212 meseci
OK, nemam mnogo iskustva sa mySQL, a imam problem koji polako kreće da me izluđuje.

Potrebno je da bazu prebacim sa jednog servera na drugu mašinu.

Problem se javlja u redovima koji u sebi sadrže specijalne znake koji nisu unescapovani, između ostalih i ' (tj. jednostruki navodnik).
Bazu sam pokušavao da prebacim na više načina. Jedan je bio da napravim dump stare baze u .sql fajl, pa onda prebacim taj fajl na novu mašinu i restorujem bazu iz tog fajla. Problem je u redovima kao što je ovaj:
Code:
INSERT INTO `tabela` VALUES ('1234', 'something', 'that's all folks')
Vidite u čemu je stvar, pri restorovanju baze mysql ovo treće polje rastumači kao 'that', što je moram da priznam i logično, šta on zna kakva je semantika mojih poruka... Onda sam probao drugačije da dumpujem bazu, i dobio nešto ovako:
Code:
INSERT INTO `tabela` VALUES ('1234', '5678', 'that^Òs all folks')
OK, pomislio sam da ovo mora da upali, ali sutra malo, u restorovanoj bazi je to polje opet samo 'that'

Drugo što sam probao je da bazu prebacim sa jednog servera na drugi koristeći Navicat i njegovu opciju za sinhronizaciju, ali opet se isto dogodilo. Verovatno i on u backendu to pretvara u SQL upite koji imaju grešku u sebi zbog gorenavedenog navodnika...

Da li neko ima ideju kako da ovo rešim?

Radio bih upit koji u celoj bazi menja karakter ' u \' ali nisam siguran da će to da reši problem jer se plašim da ima još karaktera koji mogu da naprave zbrku.

Inače u pitanju je phpBB forum i njegova phpbb_posts_text tabela, a kasnije sam video da ima grešaka i u phpbb_topics tabeli. Obe tabele bi trebalo da su u UTF-8 encodingu, bar tako kaže Navicat...

Stari server kaže da je verzija : mySQL 4.0.27-standard-log
Novi server: mySQL 5.0.26-log
oba trče na Linuxu, ne znam trenutno koje su distribucije u pitanju, novi je Gentoo, mislim da je stari RedHat, mada cenim da je to dosta nebitno.

ex. trooper
Oh goody... it's my Illudium PU-36 Explosive Space Modulator!
Softversko Inženjerstvo
♪♫♪
 
Odgovor na temu

Milos Stojanovic
Belgrade

Član broj: 10343
Poruke: 1864
195.252.89.*

ICQ: 282954730
Sajt: www.sietf.org


+7 Profil

icon Re: Unescapovani specijalni karakteri03.11.2006. u 16:05 - pre 211 meseci
Anyone? :( Da li bi možda pomoglo da ta problematična varchar polja prebacim u binary tip, onda prebacim tabelu na drugi server, pa ta polja vratim u varchar, i da li je takva konverzija uopšte moguća?
ex. trooper
Oh goody... it's my Illudium PU-36 Explosive Space Modulator!
Softversko Inženjerstvo
♪♫♪
 
Odgovor na temu

misk0
.: Lugano :. _.: CH :.

SuperModerator
Član broj: 634
Poruke: 2824
*.adsl.ticino.com.

ICQ: 46802502


+49 Profil

icon Re: Unescapovani specijalni karakteri03.11.2006. u 21:18 - pre 211 meseci
Mozda nisam najbolje shvatio pitanje, ali postoji mogucnost tj opcije kod mysqldump komande da koristis parametre i da ' zamjenis sa nekim tebi odgovarajucim karakterima. Nisam najsigurniji, ali probaj pogledati malo opcije, mozda nadjes nesto korisno.

:: Nemoj se svadjati sa budalom, ljudi cesto nece primjetiti razliku ::
 
Odgovor na temu

Dejan Topalovic
Dejan Topalović
Senior Oracle DBA & Senior PL/SQL
Developer, Erste Sparinvest (Erste
Bank), Vienna, Austria
Vienna

Član broj: 635
Poruke: 1374
*.1.14.vie.surfer.at.

Sajt: www.baze-podataka.net


+2 Profil

icon Re: Unescapovani specijalni karakteri04.11.2006. u 00:42 - pre 211 meseci
Code:
C:\mysql\data>mysql -u dejan -p dejan
Enter password: *****
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12 to server version: 5.0.24a-community-nt-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

mysql> create table test_escaped_by(string_to_escape varchar(20));
Query OK, 0 rows affected (0.02 sec)

mysql>

mysql> insert into test_escaped_by values('string1'), ('string\'2');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql>

mysql> select * from test_escaped_by;
+------------------+
| string_to_escape |
+------------------+
| string1          |
| string'2         |
+------------------+
2 rows in set (0.00 sec)

mysql>


mysql> exit
Bye

C:\mysql\data>mysqldump -u dejan -p --tab=C:\ --fields-escaped-by=' dejan test_escaped_by
Enter password: *****

C:\mysql\data>

Otvori test_escaped_by.txt u C:\ direktoriju i uvjeri se da imas ove stringove u datoteci:
string1
string''2

Potom isprazni tabelu:
Code:
C:\mysql\data>mysql -u dejan -p dejan
Enter password: *****
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 18 to server version: 5.0.24a-community-nt-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> truncate table test_escaped_by;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from test_escaped_by;
Empty set (0.00 sec)

mysql> exit
Bye

i sa mysqlimport ubaci stringove iz datoteke:
Code:
C:\mysql\data>mysqlimport -u dejan -p dejan C:\test_escaped_by.txt --fields-escaped_by='
Enter password: *****
dejan.test_escaped_by: Records: 2  Deleted: 0  Skipped: 0  Warnings: 0

C:\mysql\data>mysql -u dejan -p dejan
Enter password: *****
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 45 to server version: 5.0.24a-community-nt-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> select * from test_escaped_by;
+------------------+
| string_to_escape |
+------------------+
| string1          |
| string'2         |
+------------------+
2 rows in set (0.00 sec)

mysql> 


To je to.

Ako slucajno dobijes gresku "Access denied to user" ili "Can't create/write to file", onda pogledaj da li ti korisnik ima privilegiju FILE ili ako je baza na Linuxu/Unixu, da li mysql ima pravo zapisa u zadanom direktoriju.
Blog - baze podataka
---------------------
Oracle OCP DBA (9i & 10g)
Oracle Database: SQL Certified Expert
Oracle OCP Developer
Certified MySQL DBA
 
Odgovor na temu

Milos Stojanovic
Belgrade

Član broj: 10343
Poruke: 1864
195.252.89.*

ICQ: 282954730
Sajt: www.sietf.org


+7 Profil

icon Re: Unescapovani specijalni karakteri04.11.2006. u 02:45 - pre 211 meseci
Hvala, probaću to sutra. Eto, nije mi ni palo na pamet da pogledam man mysqldump i koje sve parametre nudi. Tnx još jednom.
ex. trooper
Oh goody... it's my Illudium PU-36 Explosive Space Modulator!
Softversko Inženjerstvo
♪♫♪
 
Odgovor na temu

[es] :: MySQL :: Unescapovani specijalni karakteri

[ Pregleda: 2166 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.