Portál AbcLinuxu, 12. listopadu 2025 15:54
mysql_query("SET NAMES kodovani") po pripojeni v kazdem skriptu, PHP je v tomhle hloupe, takze pokud to nekdo ve svem skriptu nema, je to tak trochu jeho vina...
default-character-set = kodovani v sekci [client] souboru my.cnf? Tohle kodovani mysql server nabizi klientovi (tak napr. command line klient pozna, jake kodovani ma prevzit). Takze ano, PHP je do jiste miry hloupe, ze nabizene kodovani nepouzije a je nutne mu to rici. Ale prave proto, ze se to o PHP vi mas pravdu, to ty lidi jsou hloupi, ze to ve skriptu nerikaji.
--with-charset=latin2
[client] default_character_set=utf8Ve svém houmu mám ~/.my.cnf, v něm třeba heslo nebo tak něco a krom toho řádek
!include /etc/my.cnftakže kódování se převezme z /etc. Tím je vyřešen příkaz mysql. Chtělo by to ještě podobnou věc ve skriptech v pythonu. Tam to jde takto:
#!/usr/bin/env python
#coding: utf-8
import MySQLdb
db = MySQLdb.connect(use_unicode = True, read_default_file="~/.my.cnf")
c = MySQLdb.cursors.DictCursor(db)
c.execute('show variables like "%character%"')
for row in c.fetchall():
print '%30s %30s' %(row['Variable_name'], row['Value'])
c.close()
db.close()
Komunikace probíhá v unicode, přičemž znaková sada se převezme z ~/.my.cnf a ten to zase přebere z /etc. Skript, který jsem uvedl, by měl vypsat
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server utf8
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/
a doufám, že se tím zase na nějakou dobu zbavím problémů. Kdyby se správce (což jsem já) zbláznil a rozhodl se vrátit zpátky na latin2, tak překóduje celou databázi a změní něco v /etc. A mě jakožto uživateli bude všechno nadále fungovat aniž bych cokoli měnil.
use_unicode = True" podle mě nedělá nic jiného než "SET NAMES utf8", takže to nic neřeší. Já asi u databází Wordpressu a podobných podivností nastavím Latin1, aby to nedělalo konverzi kódování, a zbytek nechám. Nechce se mi kompilovat MySQL a řešit pak aktualizace ručně...
use_unicode = True dělá to, že textová data jsou na straně pythonu překonvertována na datový typ unicode. Jinak je použit datový typ str. Znakovou sadu to neovlivňuje.
default-character-set = kodovani v sekci [client] mozna nema vliv na kodovani jake klient prevezme. Ale nasel jsem jeste jednu vec: mohlo by pomoci toto
[mysqld] init_connect = "SET NAMES utf8";Vice je uvedeno v manualove strance
mysqld (8).
default-character-set = kodovani v sekci [client] v my.cnf podle mě má vliv na to, jaké kódování převezme klient (v tomto případě php). Lze ověřit např:
<?php
$link = mysql_connect('localhost', '', '' );
$result = mysql_query("show variables like '%character%'");
while ($row = mysql_fetch_row($result))
echo "$row[0] -> $row[1]\n";
mysql_close($link);
?>
před a po editaci my.cnf
init_connect by to mela byt tutovka.
[client] se predava _vsem_ klientum.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.