A webmester hogyan hozza létre webhelyét
Az adatbázis áthelyezése a mysql korábbi változataiból a mysql-4.1-re, kódolási problémák nélkül
Ha frissíti a mysql korábbi verzióról 4.1-es verziója, sokan szembesülnek azzal a problémával, kódolás denevér. Ez azért történik, mert a 4.1-ben csak az utf-8 használatos, és a szemétlerakóból származó összes szimbólum átalakul. Vagyis, ha volt egy dump az ablakok 1251 kódolásában. azt lefordították utf-8, és helyreállítsa a szöveg már nem lehetséges, ha importál be mysql-4.1 tárol.
A megoldás az, hogy megmondja a mysql-t arról, hogy mi kódolja be a szöveget. Annak érdekében, hogy jobban megértsük, hogyan történik ez, példát adok egy adatbázisra, amelyhez nincs más hozzáférése, kivéve a mysql felületet. Például külföldi tárhely lehet.
Tegyük fel, hogy van egy sql dump a my_win1251_table asztalról. A kódolása Windows-1251. A fájl elejére sorokat adunk hozzá, amelyek megváltoztatják a mysql munkamenet változóinak értékét. Kiderül:
Most töltjük ki a dumpot a mysql-4.1 adatbázisba
Ha most nézzük a mysql-4.1 adatbázisból származó dumpot, akkor így fog kinézni:
Ne feledje, hogy INSERT mezőben a mező most utf-8 formátumban van. És hosszabb, mint az eredeti, mert az utf-8 karakterenként két bájtot tölt. Ezért, ha kinyomtatja ezt a szöveget a html oldalon, megjelenik a kérdőjel.
Csak figyeljen az új CREATE TABLE kirakó szövegére. DEFAULT CHARSET = cp1251; A mysql-4.1-ben megjelenik a karakterkészlet paraméter. amely mind az adatbázisban, mind az egyes táblákban egyenként van hozzárendelve.
Annak érdekében, hogy nemcsak a helyes adatbevitelt, hanem a kimenetet is elérjük, meg kell adnunk a mysql adatbázishoz, hogy adatokat akarunk kapni a Windows-1251 kódolásban. amelyben a "SET NAMES cp1251;" parancs segít nekünk.
A probléma globális megoldásai
A fenti példa mindenki számára elérhető, aki hozzáfér a mysql felülethez. De ha gyökér jogosultságokkal rendelkezel a kiszolgálón, próbáld meg előzetesen előre jelezni a kódolást.
Ehhez az /etc/my.cnf fájl a következőt írhatja:
Ráadásul mindez jól működött nekem és init-connect nélkül. de ez a sor sokat segít.
A konfigurációs paraméterekkel mysql is fordítható
"--with-charset = cp1251 --with-collaption = cp1251_general_ci"
A mysql-4.1 változók és a "SET NAMES cp1251;" parancs furcsa viselkedése; és "SET CHARACTER SET cp1251;"
Az interneten óriási mennyiségű információ található ezzel a problémával kapcsolatban, de szinte minden válasz arra szól, hogy állítsa be a SET NAMES parancsokat cp1251; és SET CHARACTER SET cp1251; a kapcsolat után. Íme egy példa a mysql-session-ról, amely egyértelműen azt mutatja, hogy a mysql-4.1 csak a változók egy részét változtatja a parancsok végrehajtásakor.
A dokumentáció szerint a SET NAMES módosítja a character_set_client változókat. character_set_results. character_set_connection. de a változó character_set_connection ugyanaz marad. Azt is írták ott, hogy a SET CHARACTER SET módosítja a character_set_client változókat. character_set_results. collation_connection. de a collation_connection ugyanaz marad.
Íme egy példa az összes lehetséges változó manuális cseréjére:
Ahogy látod, most minden rendben van. Ne cserélje ki a "character_set_system" változót. felelős az adatbázis belső kódolásáért, és mindig utf-szerű lesz.