ugrás a tartalomhoz

MYSQL csökkentett karaktertámogatás visszaállítása.

world-s · 2009. Jan. 23. (P), 22.31
Sziasztok!

Van egy ASUS WL-500W-s routerem amin OLEG nevű Linux fremworköt tettem.
Telepítettem rá webszerver, PHP, és MYSQL-t is csomagból.
Ha megnézem PHPMYADMIN-ról, akkor azt írja, hogy csak az UTF8 és a LATIN1 támogatott csak.
Gondolom minden felesleget lekapcsoltak a csomagban, mert ugye ez csak egy ROUTER és nem egy szerver vagy asztali PC.
A kérdésem az, hogy hogyan lehet legalább a latin2 támogatást visszakapcsolni?
Kérdeztem olyan fórumon is ahol a routerrel foglalkoznak, de ott nem tudták.
Abban bízok, hogy valaki általánosan hátha tudja ezeket a kapcsolási lehetőségeket a MYSQL-ben.

Azt néztem, hogy az /opt/share/mysql/charsets/ könyvtárban ott vannak az XML-ek. A latin2 is. Nem tudom, csak sejtem, hogy ezekhez lesz valami köze.
Sőt a /opt/share/mysql/hungarian/könyvtár is ott. Nem tudom azt sem, hogy azt hol lehet állítani, hogy az ottani magyar nyelvű hibaüzeneteket használja. (de ez csak másodlagos. A fő a latin2 támogatás)

Segítségeteket előre is köszönöm.

Zoli
 
1

Piszkálj bele a konfigurációs fájlba

ganyecz · 2009. Jan. 23. (P), 23.26
A kérdésem az, hogy hogyan lehet legalább a latin2 támogatást visszakapcsolni?


A mysql konfigurációs fájljában (ez az /opt/etc/mysql... környékén lesz my.cnf néven valószínűleg) add meg a character_set_server értékét (a [mysqld] "csoport" alatt):

[mysqld]
character_set_server = latin2

Nem tudom azt sem, hogy azt hol lehet állítani, hogy az ottani magyar nyelvű hibaüzeneteket használja


Ugyanott:

[mysqld]
language = /opt/share/mysql/hungarian

Kicsit bővebben: Server Command Options
3

Még nem megy

world-s · 2009. Jan. 24. (Szo), 00.40
Szia!
Köszi a segítséget.
Meg is találtam a my.cnf-et.
Nem volt benne ez, de beleraktam.
Sajnos viszont így sem megy.
Megnéztem az indítóscriptet amin elindítja a mysql-t.
Ott úgy néztem, hogy safe módot indítja.
Ez lehet a baj?
Azt már beleírtam, hogy hol van a cnf file.
extra_args="-e /opt/etc/my.cnf"
és
conf=/opt/etc/my.cnf

A start így néz ki:

if test -x $bindir/mysqld_safe
then
  # Give extra arguments to mysqld with the my.cnf file This script may be overwritten at next upgrade
  echo $echo_n "Starting_MySQL";
  $bindir/mysqls_safe --datadir=$datadir --pid-file=$pid_file >/dev/null 2>&wait_for_pid created
  #Make lock for RedHat / Suse
  if test -w /var/lock/subsys
  then
    touch /var/lock/subsys/mysql
  fi
  else
    log_failure_msg "Can't execute $bindir/mysql_safe"
  fi
  ;;
......
Lehet hiába állítom be a conf-ot arra valahol hivatkozni is kellene?
Sajnos még csak most ismerkedem a Linuxszal, így csak próbálkozom.

Amúgy néztem egy másik szervert ahol van támogatás (rendes szerver).
Ott a default-chatacter-set=latin2-t találtam.

Megköszönök minden segítséget.
Zoli
5

Hát kizártnak tartom, hogy

ganyecz · 2009. Jan. 24. (Szo), 01.14
Hát kizártnak tartom, hogy bele kellene írnod az init szkriptbe bármit is. Esetleg keress rá az init szkriptben a "my.cnf" karakterláncra, lehet nem is ott keresi ahol te megtaláltad...

Meg is találtam a my.cnf-et. Nem volt benne ez, de beleraktam.


Beidézed mi van még a my.cnf-ben? Mondjuk a kommentek nélkül, ha túl bő lére van eresztve...

Sajnos viszont így sem megy.


Ezt a phpmyadmin "mondja" neked, vagy a "SHOW VARIABLES LIKE 'character%';" lekérdezés az újraindítás után?
7

Ez van benne

world-s · 2009. Jan. 24. (Szo), 01.45
Érdekes.
A parancsra azt adja:

character_set_client utf8
character_set_connection utf8
character_set_database latin1
character_set_results utf8
character_set_server latin2
character_set_system utf8
character_sets_dir /opt/share/mysql/charsets/

Viszont amikor új adatbázist akarok létrehozni akkor csak utf8 és latin1 van.
Illetve ez a két csoporton kívül a karakter-egybevetésnél is szürke a többi.

Azért írtam az indítóba két helyen, mert úgy néztem máshol keresné a my.cnf-et, ezért átírtam ideiglenesen, mert nem volt kedven másolni.


A my.cnf

[client]
port  = 3306
socket  = /tmp/mysql.sock 
[mysqld]
user  = root
datadir  = /opt/var/lib/mysql
port  = 3306
socket  = /tmp/mysql.sock
skip-locking
key_buffer = 16K
max_allowed_packet = 1M
table_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 64K

#World-S
character_set_server = latin2
language = /opt/share/mysql/hungarian/ 
skip-networking
server-id = 1
skip-bdb 

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash 

[isamchk]
key_buffer = 8M
sort_buffer_size = 8M

[myisamchk]
key_buffer = 8M
sort_buffer_size = 8M

[mysqlhotcopy]
interactive-timeout

[mysql.server]
user=root

[safe_mysqld]
Next:
Kiszedtem amire gondoltam az idítóban, de akkor is ott maradt a latin2, tehát azt visszaállítottam az eredetire. Valóban nyílván nem kell belenyúlni.

Kipróbáltam, hogy beírom ezt is a my.cnf-be:
character_set_database = latin1

de akkor nem indul el.
8

Akkor a konfigurációs fájlt

ganyecz · 2009. Jan. 24. (Szo), 02.17
Akkor a konfigurációs fájlt beolvassa:

...
character_set_server latin2
...


Illetve ez a két csoporton kívül a karakter-egybevetésnél is szürke a többi


Ez gondolom a phpmyadminban van így. Ezzel kapcsolatban nem tudok mit mondani, talán töltsd le a legfrissebb phpmyadmin-t. Ha nem "üvöltött" a latin2 (és a language=.../hungarian) miatt a konfigurációs fájlban az újraindításkor, akkor támogatja.

Nézd meg ezekre a parancsokra mit ad vissza:

set character_set_results='latin2';
set character_set_client='latin2';
set character_set_connection='latin2';
SHOW VARIABLES LIKE 'character%';


Legvégső esetben a fenti első három parancsot add ki a kódodban, mielőtt akármilyen lekérdezést végrehajtanál. Ha jól vannak megírva a cuccaid, akkor egyetlen függvénybe/metódusba kell beraknod három "mysql_query"-t, mondjuk közvetlenül a "mysql_connect" után.
9

Lehet?

world-s · 2009. Jan. 24. (Szo), 13.22
Lehet hogy nem is a mysql hanem a phpmyadmin szivat?
Benyírtam először egyben amit írtál még PHA-ban.
Ezt kaptam:

SET character_set_results = 'latin2';
SET character_set_client = 'latin2';
SET character_set_connection = 'latin2';
SHOW VARIABLES LIKE 'character%';
Válasz:

Variable_name  Value  
character_set_client latin2 
character_set_connection latin2 
character_set_database latin1 
character_set_results latin2 
character_set_server latin2 
character_set_system utf8 
character_sets_dir /opt/share/mysql/charsets/ 
Tehát látok latin2-t.

Ezért csináltam egy próba táblát:

CREATE TABLE `bbb` (
`if` INT NOT NULL ,
`txt` VARCHAR( 30 ) NOT NULL 
) TYPE = MYISAM CHARACTER SET latin2 COLLATE latin2_hungarian_ci 
És láss csodát létrehozta.
Maga a phpmyadmint is úgy telepítettem fel az OLEG FW-ből, és nem úgy mint ahogy szoktam (letöltöm a netről).
Ezek szerint nyílván a PMA-t butították, csak nem értem miért. Ezzel még nem eszik kevesebb erőforrást szerintem.
Most jön annak keresése, hogy hol lehet butítva a PMA.
Most nézem még 2.6.2-es verziót tett fel, holott már 3.1.2-nél tartunk.
Zoli
10

Megy!

world-s · 2009. Jan. 24. (Szo), 14.13
Feltettem a 2.11.9.4-es verziót.
Minden megy.
Így elsőre nem láttam olyat mintha tiltva lenne.
Lehet valami kompatibilitási hiba, vagy csak nem olyan feltűnő a különbség.

Köszi
Zoli
2

latin2???

fchris82 · 2009. Jan. 24. (Szo), 00.35
Miért kell neked latin2??? 15 éve létezik az UTF-8, azóta a latin1-ben nem szereplő karaktereket tartalmazó szöveg tárolására rég azt kéne használni mindenhol... Persze biztosan van ok rá, hogy ne ez legyen, csak én még nem találtam ilyet :))
4

kompatibilitás miatt

world-s · 2009. Jan. 24. (Szo), 00.45
Szia!
Mivel ahova a kódom kerül ott legtöbb helyen latin2-t használnak.

Idáig itthon a PC volt minden úgy fejlesztettem.
Most ezen a routeren szeretnék a későbbiekben.
És az lenne a jó ha valamit megcsinálok itthon akkor egy az egyben átmásolással 100%-ossan menjen.
Nem szeretnék adatbázis áthelyezéseknél bajlódni, hogy tutira jól jelenjenek meg az ékezetek a két szerver között stb., mivel általában pár percem van mindig élesíteni csak az élesen.
Tehát az élessel teljesen egyenrangú rendszert szeretnék a routeren kialakítani.
Zoli
6

Amennyiben csak a te kódod

ganyecz · 2009. Jan. 24. (Szo), 01.40
Amennyiben csak a te kódod futna, akkor annyiban módosíthatod a cuccodat, hogy mielőtt bármilyen lekérdezést végrehajtanál, add ki az alábbi parancsokat:

set character_set_results='latin2';
set character_set_client='latin2';
set character_set_connection='latin2';


Így nem kell a szerverrel bajlódnod...