Autor | Zpráva | ||
---|---|---|---|
Prefin Profil |
#1 · Zasláno: 26. 11. 2012, 11:27:17
Ahojda všichni.
Chtěl bych se zeptat zda a do jaké míry může ovlivňovat předávání dat mezi webem a MySql její nastavení proměnných: character set client utf8 (Globální hodnota) latin1 character set connection utf8 (Globální hodnota) latin1 character set database latin1 character set filesystem binary character set results utf8 (Globální hodnota) latin1 character set server latin1 character set system utf8 collation connection utf8_general_ci (Globální hodnota) latin1_swedish_ci collation database latin1_swedish_ci collation server latin1_swedish_ci Pma je asi na takové nastavení v defaultu náchyný, protože jsem to viděl snad na každém hostingu včetně localhostu. Je možnost jak to změnit? Nenašel jsem nikde možnost jak to udělat (možná v konfiguráku?). Do jaké míry to může ovlivňovat komunikaci s webem? Četl jsem také, že pro tohle je podstatné v podstatě kódování nejnižšího prvku - sloupce. V mém případě na www.hexageek.cz mám dvojkové phpbb, které je na utf-8, db - databáze+tabulka+všechny textové sloupce utf8_czech_ci. Když nepoužiji @mysql_query("SET NAMES utf8"); Dají se nějak spolehlivě zdetekovat použité znakové sady dat v db i v případě kratších řetězců? |
||
peta Profil |
data -> sloupec -> connection server / SET NAMES -> php Pri vytvareni tabulky se u ni nastavi kodovani podle kodovani databaze nebo tvoje zvolene. Pri vytvareni databaze se u ni nastavi kodovani podle serveru nebo tvoje zvolene. Pro konvezi kodovani pri spojeni se pouzije default kodovani pro connection nebo tvoje vlastni v SET NAMES. A to je cele to kouzlo. SET NAMES nastavi konvertovani na utf8. sql dotaz vytahne data z databaze, pouzije pouzije kodovani sloupcu tabulky. Vysledek pak prekonvertuje na do utf8. a) Pokud mas loupec nastaveny na colation latin2 a data v nem ulozena v kodovani latin2, pak se vytahnou v latin2 a pak zkonvertuji na utf8 podle setnames. b) Pokud mas soupec nastaveny na colation latin2 a data v nem ulozena v kodovani win1250, pak data vytahnou, ale jsou povazovana za latin2 a ne win1250 a pak jsou chybne prekodovana z latin2 na utf (set names ti tam zmrsi diakritiku). data win1250 -> sloupec latin2 -> setnames utf -> html utf - chybne data win1250 -> sloupec latin2 -> setnames latin2 -> html win1250 spravne, html latin2 chybne |
||
Kajman Profil |
#3 · Zasláno: 27. 11. 2012, 17:07:18
Prefin:
Když nepoužiji SET NAMES utf8 tak jsou znaky rozhozené - znamená to že jsou znaky, uložené v db v jiném kódování než utf (cp1250/iso)? Když nepoužite set names, použite se nastavení connection serveru - tedy latin1. Server si tedy bude myslet, že data dáváte a chcete v latin1, proto vždy provede konverzi mezi latin1 a znakovou sadou použitou pro daný sloupeček. Pokud však je web v utf-8, přenastavte si právě přes uvedené set names utf8 správné kódování. |
||
Prefin Profil |
#4 · Zasláno: 27. 11. 2012, 18:56:42
Díky, to je vyčerpávající.
|
||
Časová prodleva: 11 let
|
0