Megváltoztatása a kódolási táblákat mysql, autodidakta jegyzetek

Így kezdődött az egész azzal a ténnyel, hogy telepítve van MySQL, hozzon létre egy táblázatot, tele őket adatokat, majd megállapította, hogy a kéréseket a táblázatok, amelyekben van egy kereső, vagy rendezés terén CHAR, VARCHAR, TEXT így kiszámíthatatlan eredményeket. Ha ez történik, akkor valószínűleg helytelenül adja meg a kódolást az adatokat. Megpróbálom elmagyarázni, mi a probléma. Remélem, megérti milyen kódolást. Ha nem, progugilite kérdésre, hogy legalább az általános tudás.

Szóval Lássuk, hogy kiderült, hogy van egy probléma a kódolást. MySQL alapértelmezett kódolás az adatbázis jelzi latin1. A legtöbb ügyfél, ha csatlakozik, állítsa latin1 kódolást. Ön használ az ügyfelek az adatok bevitelére, megtekintését eredmények stb Ebben az esetben a latin1 kódolást mindenhol. Ez a kódolás lehetővé teszi, hogy helyesen megjeleníteni a cirill ábécét. Ezen a helyességét foglalkozó cirill kódoló latin1 végét. A szimbólum megjelenik a jobb, de a kódok a szimbólum táblázatot a kódolás nem felel meg a tényleges cirill karaktereket. És kiderül, hogy a keresési és rendezési így kiszámíthatatlan eredményeket, mert a munka nem kerül sor a karakterek, hogy látod, és kódokat. Talán zavaró magyarázta, majd elé a tényt: a kódolás latin1 - helytelen kódolás befejezni a munkát krillitsey. Hogy működik helyesen ki kell választania a cirill kódolást támogató cirill. Ahhoz, hogy tudjuk a teljes listát ezen kódolási RTFM MySQL. Fogok összpontosítani két közös közül: utf-8 és cp1251. Kezdjük cp1251. mert ez a természetes kódolás Windows operációs rendszer.

Tehát a kihívás: átalakítani az adatokat az eredetileg tévesen erősítette meg a megfelelő kódolás latin1 kódolást cp1251. Mi megy a dokumentáció a nyelvet:

Ha meg akarjuk változtatni a táblázat alapértelmezett karakterkészlet és minden karakter oszlopok (CHAR, VARCHAR, TEXT) egy új karakterkészlet, használjon egy nyilatkozatot, mint ez:
ALTER TABLEtbl_nameCONVERT jellemre SETcharset_name; (1)

Nem siet, hogy végezzen a javasolt megoldás, és olvassa el:

Figyelmeztetés. Az előző művelet átalakítja oszlop közötti értékek a karakterkészletet. Ez nem az, amit akarsz, ha van egy oszlop egy karakterkészlet (mint latin1), de a tárolt értékek ténylegesen használni más, kompatibilis karakterkészlet (mint cp1251). Ebben az esetben meg kell tennie a következőket minden ilyen oszlop:
ALTER TABLEt1CHANGEc1 c1BLOB; (2)
ALTER TABLEt1CHANGEc1 c1TEXT KARAKTER SETcp1251; (3)

Az ok ez működik, hogy nincs konverzió, ha konvertálni vagy BLOB oszlopok.

Egyszerű átalakítás adatok (1) nem felel meg nekünk, mert van hibás kódok karakterek, valamint az átalakítás zajlik szerint a kód táblázat, akkor kap egy téves eredményt. A kimenet ebben a helyzetben -, hogy megszabaduljon a kötelező jellege a kódolást. Ez úgy történik, karakteres adatok átalakítása, és a bináris adatok típusát (2). Képzeljük el, hogy a kódolás - egy maszk, ami rárakódik a bináris adatokat. Ie végződést maga nem változik, de a változások csak a maszk, ami által kiválasztott kódok kialakulása vizuális szimbólumok. Így a kérelem (2) megszabadulni a maszk, és a kérés (3) be van húzva egy új maszkot. Ismétlem még egyszer (durván szólva): fizikailag, nem változtattunk egy bájt adatot fogjuk megváltoztatni a szabályokat kialakulásának karakter! Ennek eredményeként, akkor kap a következő: a tényleges adatok voltak érvényesek a cp1251 kódolás, ezért itt maradtak, de most már a jogot, hogy a kódolást cp1251.

Ezek után a manipulációk az élet az adatbázisokat, és mintát kell igazítani, mert most mindez együtt, és minden a helyén. Most, ha meg akarja változtatni a kódolás táblákat és mezőket, nyugodtan használja a kérés (1). By the way, Gondolkodom mozogni cp1251, hogy utf-8, de most nem tudok világosan hangot, Miért kell: néhány előfeltételei, de egy világos megértése még nem.

  1. Ha konvertálni az adatokat az eredetileg tévesen erősítette meg a megfelelő kódolás latin1 kódolást cp1251. Nem lehet csak úgy megváltoztatni a karakterkészlet az oszlop, azaz nem tudja teljesíteni a kérelmet (2), és azonnal végezze el a kérést (3). Mert, hogy a helyes kérés (3) nem fogunk fizikailag rekonstruálni a maszkot, hanem egyszerűen változtatni a jelenlegi értékét a maszkot. Ha nem sikerül a következetlenség kódolások, és akkor csak meg kell változtatni a kódolás az asztalra, akkor csak a kérelem teljesítéséhez (1).
  2. Ha konvertálni az adatokat az eredetileg tévesen erősítette meg a megfelelő kódolás latin1 kódolást cp1251. Ugyanakkor változtatni a kódolás a területen, amely egy indexet, majd újjáépíteni az index (távolítsa el, és újra létre).
  3. Ha úgy dönt, hogy a kódolás UTF-8 - Biztosítani kell, hogy a vizuális ügyfelek támogatják a Unicode. Például, mint szeretett engem SQLyog 5,2 bambusz füst megjelenítésekor a tartalmát a táblázatok az adatok tárolására utf-8.
  4. MySQL elkezdték támogatni unicode változat csak 4.1.x, azaz Unicode volt addig, amíg ezt a támogatást. Ez azt jelenti, ha azt szeretnénk, egy asztal, egy unicode perensti verzió 4.1.x fiatalabb, akkor nem fog sikerülni. Két kimenet: vagy átalakítani adatok Unicode valami kevésbé multibyte például cp1251; vagy frissíteni az adatbázist változat szerint 4.1.x. Az adatbázis frissítése predpochitetlney mert MySQL 3KA véleményem nem támogatja, és 4KA is hamarosan megszűnik fenn kell tartani, és az 5. SA aktívan fejlesztik a két ág. És az egész világ a Unicode aktív egy hálózatban működik.

Kapcsolódó cikkek