sql >> Databáze >  >> Database Tools >> phpMyAdmin

MySQL vydává západní kódování v souboru PHP UTF-8

Použijte mysqli_set_charset pro změnu kódování klienta na UTF-8 hned po připojení:

$mysqli->set_charset("utf8");

Klientské kódování je to, v čem MySql očekává váš vstup (např. když do vyhledávacího dotazu vložíte text dodaný uživatelem) a v čem vám poskytne výsledky (takže musí odpovídat vašemu výstupnímu kódování, aby echo správně zobrazovat věci).

Je třeba, aby odpovídalo kódování vaší webové stránky, aby bylo možné zohlednit dva výše uvedené scénáře a kódování zdrojového souboru PHP (aby byly pevně zakódované části vašich dotazů interpretovány správně).

Aktualizace:Jak převést data vložená pomocí latin-1 na utf-8

Pokud jde o data, která již byla vložena pomocí nesprávného kódování připojení, existuje pohodlné řešení, jak problém vyřešit. Pro každý sloupec, který obsahuje tento druh dat, musíte provést:

ALTER TABLE table_name MODIFY column_name existing_column_type CHARACTER SET latin1;
ALTER TABLE table_name MODIFY column_name BLOB;
ALTER TABLE table_name MODIFY column_name existing_column_type CHARACTER SET utf8;

Zástupné symboly table_name , column_name a existing_column_type by měl být pokaždé nahrazen správnými hodnotami z vaší databáze.

Co to dělá, je

  1. Řekněte MySql, že potřebuje uložit data do tohoto sloupce v latin1. Tato znaková sada obsahuje pouze malou podmnožinu utf8, takže obecně tato konverze zahrnuje ztrátu dat, ale v tomto specifickém scénáři byla data již na vstupu interpretována jako latin1, takže nebudou žádné vedlejší účinky. MySql však interně převede bajtovou reprezentaci vašich dat tak, aby odpovídala tomu, co bylo původně odesláno z PHP.
  2. Převeďte sloupec na binární typ (BLOB ), který nemá žádné související informace o kódování. V tomto bodě bude sloupec obsahovat nezpracované bajty, které jsou správným znakovým řetězcem utf8.
  3. Převeďte sloupec na jeho předchozí typ znaku a sdělte MySql, že nezpracované bajty by měly být považovány za kódování utf8.

UPOZORNĚNÍ:Tento nerozlišující přístup můžete použít pouze v případě, že příslušný sloupec obsahuje pouze špatně vložená data. Všechna data, která byla správně vložena, budou zkrácena při prvním výskytu jakéhokoli jiného znaku než ASCII!

Proto je dobré to udělat hned teď, než vstoupí v platnost boční oprava PHP.



  1. PHPMyAdmin 4.0.5 – funkce pro úpravy mřížky, zaškrtávací políčko, úpravy, kopírování a mazání nejsou k dispozici

  2. Jak vybrat odlišnou maximální hodnotu z vícenásobné spojovací tabulky MySQL

  3. Upravte dtsx přes SSMS

  4. Aktualizační dotaz zrušen uživatelem