kodovani mysql

Linux, Unix, BSD systémy, distribuce, open source

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod Kaifman 25. 11. 2005 22:18

Ahojte,
mam takovej problem nainstalil jsem mysql kde jsem nastavil kodovani latin2 jak pro klienta tak pro mysqld a kdyz nahraju dump z db ktera je nastavena uplne stejne tak mi to uplne rozhazi cestinu. Netusite nekdo cim to muze byt ?
Kaifman
Junior

Odeslat příspěvekod Kaifman 25. 11. 2005 22:22

jo sry zapomel jsem napsat ze mam suse 9.3
Kaifman
Junior

Odeslat příspěvekod Kaifman 25. 11. 2005 22:23

tam se pry nejak defaultne laboruje s unicode ... muze to mit na to vliv ?
Kaifman
Junior

Odeslat příspěvekod o@k 25. 11. 2005 23:20

Kodovani pri exportu/importu se v MySQL se ridi hodnotou promenne default-character-set (u exportu je jina nez u importu). Zkuste v konzoli postupne zadat:
Kód: Vybrat vše
mysqldump --help | grep "default-character-set "
mysql --help | grep "default-character-set "
Mate obe skutecne nastaveny shodne na latin2?
    * Pokud ne, lze ji v konzoli pri exportu/importu (at uz mysqldump/mysql) nastavit pomoci parametru --default-character-set=latin2
    * Pokud ano, pak je mozne, ze importovany SQL soubor neni kodovan Latin 2, ale jinak (napr. UTF-8), zde by mohlo pomoci --default-character-set=utf8, popr. SQL soubor prekodovat pomoci napr. iconv nebo recode do Latin 2.
Na urovni SQL jde pri vytvareni tabulek (uplny import databaze) pro nastaveni kodovani pouzivat prikaz CREATE TABLE s parametrem CHARACTER SET.
o@k
Junior
Uživatelský avatar

Odeslat příspěvekod Kaifman 9. 12. 2005 23:00

to vsechno samozrejme vim a davno uz jsem to vyzkousel ale to kodovani je stejne porad zmrsene
Kaifman
Junior

Odeslat příspěvekod Kaifman 9. 12. 2005 23:21

na jakychkoliv servrech kde sem to zkousel to normalne funguje jen u me doma to dela binec :(

jak rikam db obe nastavene stejne dump v latin2 a stejne to nejde
kdyz dam source tak mi to hlasi u nekterejch insertu warningy... to pravdepodobne budou ty konfilkty znakovy sady

at delam co delam porad to same :(
Kaifman
Junior

Odeslat příspěvekod o@k 10. 12. 2005 13:13

Pokud budu vedet, velmi rad vam pomohu, ale nesmite byt tak skoupy na slovo - bohuzel nemam kristalovou kouli. To, co "vsechno vite" a co "vsechno jste davno zkousel", jste mel napsat hned na zacatku! Rovnez by stalo za to, kdybyste byl trochu konkretnejsi ohledne verze MySQL a jeho konfigurace (my.cnf). Ja nevim, ale treba se snazite o import z novejsi verze do starsi?! Dulezite je nejen cislo verze, ale i parametry kompilace a pokud jste instaloval binarky (jak predpokladam), tak alespon, zda pouzivate verzi standard, ci max. Pouhe "mam suse 9.3", ktere "laboruje s Unicode" nestaci!
Takze nez napisete vice, mala rekapitulace - na nastaveni jazyka pro praci s retezci v MySQL neni nic zaludneho. Zjednodusene:
    * kodovani na urovni serveru mysqld se ridi promennymi default-character-set v sekci [mysqld] konfiguracniho souboru my.cnf, trideni pak nastavenim default-collation tamtez. Obe tyto promenne mohou byt samozrejme nastaveny pomoci stejnojmennych parametru pri spousteni serveru z konzole.
    * kodovani na urovni klienta mysql se ridi promennou default-character-set v sekci [client] stejneho konfiguracniho souboru, tedy my.cnf. Opet je mozne jej explicitne nastavit pri spousteni z konzole.
    * kodovani a trideni na urovni databaze se ridi hodnotami DEFAULT CHARACTER SET a COLLATE v prikazu CREATE/ALTER DATABASE, na urovni tabulek pak hodnotami CHARACTER SET a COLLATE v prikazu CREATE/ALTER TABLE a nakonec kodovani jednotlivych CHAR, VARCHAR, TINYTEXT, MEDIUMTEXT, TEXT a LONGTEXT sloupcu pomoci CHARACTER SET a COLLATE v definici sloupce.
Pro vlastni import ze SQL souboru (at uz pomoci source, nebo presmerovanim vstupu) je predevsim dulezite, aby se shodovalo kodovani klienta mysql s kodovanim importovaneho SQL souboru.
Kodovani souboru zjistite napr. pomoci prikazu file a mate 2 moznosti:
    * bud to, co vam vrati file (mel by vam vratit ISO-8859 text), nastavite pri spousteni klienta mysql (pri importu) pomoci --default-character-set,
    * nebo soubor pred importem prevedete do defaultniho kodovani klienta pomoci iconv nebo recode.
Ale to vse uz jsem psal pred 14 dny. Zkuste tedy blize popsat ten "binec", co vam to dela, nejlepe vypisem warningu z insertu a obecne: Budte co nejkonkretnejsi, zvysite tak svou sanci, ze se zde ve foru najde nekdo, kdo resil podobny problem ;-)

OT: S cim "laboruje" vas SUSE Linux zjistite zadanim prikazu locale; locale -a vam vrati, s cim vsim by "laborovat" mohl/umel a vliv by to mit nemelo.
o@k
Junior
Uživatelský avatar

Odeslat příspěvekod Kaifman 11. 12. 2005 13:47

Tak trochu jsem popolezl
Ceho sem si predtim nevsim tak je to ze mi mysql nebere ohled na radek default-character-set=latin2 v my.cnf

kde to mam takto

[client]
#password = your_password
port = 3306
socket = /var/lib/mysql/mysql.sock
default-character-set=latin2

# Here follows entries for some specific programs

# The MySQL server
[mysqld]

port = 3306
socket = /var/lib/mysql/mysql.sock
skip-locking
key_buffer = 16M
max_allowed_packet = 1M
table_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
default-character-set=latin2

kdyz totiz potom restartuju server, dam v konzoli mysql status

mysql Ver 14.7 Distrib 4.1.10a, for suse-linux (x86_64)

Connection id: 2
Current database:
Current user: filip@localhost
SSL: Not in use
Current pager: less
Using outfile: ''
Using delimiter: ;
Server version: 4.1.10a
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: latin2
Client characterset: latin2
Conn. characterset: latin1
UNIX socket: /var/lib/mysql/mysql.sock
Uptime: 8 min 43 sec

dalsi vec ktere jsem si vsiml a tim padem problem neni v importu ale v tom co pisu vyse, tak kdyz zkusim neco vlozit v me php aplikaci do db tak se to taky zmrsi, kdyz ale dam po pripojeni k db set names latin2; tak je to v pohode
-> z toho vyplyva ze jedine co musim je nejak presvedcit server aby defaultne startovat s latin2 jak u mysqld tak u client coz se mi zatim nedari :-/

s kodovanim souboru s importem by to imho nemelo mit problem, prenasim takhle dumpy mezi vicero servrama s ruznyma OS a vzdycky to bezi, mysqldump totiz prevadi data do default-character-set ktery ma nastaven ale taky pridava set names .... na zacatek dumpu takze db si to sama prebere a prevede at uz to je v cemkoliv
Kaifman
Junior

Odeslat příspěvekod Kaifman 11. 12. 2005 16:11

tak jsem nainstalil novou verzi myslq 4.1.15
ta sice bere ohled na to co ma v configuraku a nastavuje default charset na latin2 ale stejne v aplikaci mam tu diakritiky zmrsenou pokud po pripojeni nespustim dotaz set names latin2 ...napada me jestli nahodou nema to php api k mysql nejakej vlastni konfigurak...zadnej ale nemuzu najit krome toho co je v php.ini tak nevim cim to :(
Kaifman
Junior

Odeslat příspěvekod o@k 11. 12. 2005 23:33

Myslim, ze to, co hledate v php.ini nenajdete. Pokud chcete, aby byla vsechna spojeni k vasemu serveru defaultne kodovana latin2, pridejte do sekce [mysqld] konfiguracniho souboru my.cnf nasledujici radek:
Kód: Vybrat vše
[mysqld]
# ...
init-connect='SET NAMES latin2'

Pozn.: Spousteni dotazu SET NAMES 'latin2' je zcela namiste tam, kde nemate dostatecna prava k uprave konfigurace MySQL serveru (a je na vas, abyste si to ve sve PHP aplikaci pohlidal). Pokud se tedy chystate svou PHP aplikaci prenaset na 'cizi' server, doporucuji vam si pro spojeni s MySQL napsat svou vlastni funkci - neco na zpusob:
Kód: Vybrat vše
function my_db_connect($HOST,$USER,$PASS,$DB,$PORT)
{
   $conn = mysql_connect($HOST . ":" . $PORT , $USER, $PASS);
   mysql_query("SET NAMES 'latin2'", $conn);
   mysql_select_db($DB);
   return $conn;
}
o@k
Junior
Uživatelský avatar

Odeslat příspěvekod Kaifman 12. 12. 2005 14:41

My si vsechny nase aplikace hostujeme, pokud ne tak aspon adminujeme server kde to běží takze problem neni. Hlavne jak uz jsem psal nikde jinde sem se s timto nesetkal krome Suseho, takze jsem z toho byl docela v lese, Jsem "jenTakyProgramator", nikoliv provozak :)

diky
Kaifman
Junior

Odeslat příspěvekod Kaifman 12. 12. 2005 22:13

init-connect='SET NAMES latin2'

tak bohuzel toto nepomohlo :-/
Kaifman
Junior

Odeslat příspěvekod o@k 13. 12. 2005 01:37

Omlouvam se, ale asi jsem se vyse dopustil maleho preklepu. Pokud jste to jiz nezkousel, zkuste promennou init-connect psat s podtrzitkem misto pomlcky, tj.
Kód: Vybrat vše
[mysqld]
# ...
init_connect='SET NAMES latin2'

a po restartu serveru si v konzoli mysql pomoci SHOW VARIABLES LIKE 'init_connect'; overte, ze je tato skutecne nastavena. Jinak uz me v tuto hodinu vazne nic nenapada. :-(

Vim, ze se opakuji, ale jen pro jistotu:
Skutecne mate ve vystupu z SHOW VARIABLES; vsechny globalni promenne tykajici se kodovani shodne nastaveny na latin2? (Muzete si dat vypsat pouze ty pomoci SHOW VARIABLES LIKE 'character_set_%';)
Je-li vase odpoved na predchozi otazku kladna a presto to 'nefunguje', pak mam za to, ze bude treba zacit zakopaneho chameleona hledat nekde jinde. Bohuzel vam neumim rict kde.
o@k
Junior
Uživatelský avatar

Odeslat příspěvekod Kaifman 13. 12. 2005 18:22

bohuzel ani z potrzitkem to nejde promena tam je ale nic se nezmenilo

mysql> show variables like 'init_connect';
Kód: Vybrat vše
+---------------+------------------+
| Variable_name | Value            |
+---------------+------------------+
| init_connect  | SET NAMES latin2 |
+---------------+------------------+


vypis nastaveni charsetu

mysql> show variables like '%char%';
Kód: Vybrat vše
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin2                     |
| character_set_connection | latin2                     |
| character_set_database   | latin2                     |
| character_set_results    | latin2                     |
| character_set_server     | latin2                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+


//Lemur - pridan tag code
Kaifman
Junior


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků