Portál AbcLinuxu, 10. května 2025 12:31
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.