Skocz do zawartości
"Idzie nowe..." - o zmianach i nie tylko ×
Przeniesienie zakupów z IPS Marketplace / Moving bought items from IPS Marketplace ×

Przekonwertowanie bazy z latin_1swedish_ci na utf8


uki

Rekomendowane odpowiedzi

Witam znalazłem skrypt podany przez jednego użytkownika tego forum mianowicie:

/**

*

* @copyright © 2009 Łukasz Rutkowski

* @license http://creativecommons.org/licenses/by/3.0/pl/ Creative Commons Uznanie autorstwa 3.0

*

*/

function repair($tbl, $id) {

$sql = new MySQLi('host_bazy', 'użytkownik', 'hasło', 'baza_danych');

//Go to latin1

$sql->query('SET NAMES latin1');

//Get count

$cnt = $sql->query('SELECT COUNT(' . $id . ') AS count FROM ' . $tbl);

$cnt = $cnt->fetch_assoc();

$cnt = $cnt['count'];

//Get records

$all = $sql->query('SELECT * FROM ' . $tbl);

//Columns

$columns = $sql->query('SHOW COLUMNS FROM ' . $tbl);

//List columns

while($clmn = $columns->fetch_assoc()) { $clmns[] = $clmn['Field']; }

//Back to utf8

$sql->query('SET NAMES utf8');

//Generate SET clause

while($row = $all->fetch_assoc()) {

$i = 0;

$set = '';

foreach($clmns as $clmn) {

if($clmn != $id) {

if($i != 0) {

$set .= ', ';

}

$set .= $clmn . '="' . addslashes($row[$clmn]) . '"';

$i++;

}

}

$sql->query('UPDATE ' . $tbl . ' SET ' . $set . ' WHERE ' . $id . '=' . $row[$id]);

}

unset($sql);

}

Jestem zielony jeśli chodzi o bazy.

Moje pytanie jak za pomocą tego skryptu przekonwertować bazę z latin_1swedish_ci na utf8

Z góry serdeczne dzięki.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager

Hym, skoro jesteś zielony to jak chcesz to zrobić? A jak wyskoczy jakiś nieprzewidziany 'bloom'? W sensie coś niespodziewanego?

Nie wierzę, że autor tego skryptu nie umieścił opisu, jak się nim posługiwać.

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Odnośnik do komentarza
Udostępnij na innych stronach

Umieścił ale nic z tego nie rozumiem jest napisany jakimś ciężkim językiem

Aż taki zielony nie jestem

Ale przydał by mi się jakiś opis krop po kroku coś w tym stylu

Jeśli możesz pomóc będę ogromnie wdzięczny

Odnośnik do komentarza
Udostępnij na innych stronach

NIestety gdy chcę odpalić plik wyskakują mi takie błędy:

Warning: fclose(): supplied argument is not a valid stream resource in C:\Program Files\WebServ\httpd-users\baza\konwerter.php on line 24

Warning: fclose(): supplied argument is not a valid stream resource in C:\Program Files\WebServ\httpd-users\baza\konwerter.php on line 25

Koniec konwersji

Odnośnik do komentarza
Udostępnij na innych stronach

Uki, koniecznie użyj skryptu, który podałeś w temacie. Ostatnio sam go używałem, działa bezbłędnie i poradzi sobie z Twoim kodowaniem. Po prostu musisz zapisać podane linijki jako plik PHP, podać kilka danych odnośnie bazy SQL oraz (bardzo ważne) przed całą operacją użyć komendy SQL 'set names UTF8'.

Jeśli DawPi tego nie zrobi to ja Ci pomogę jak tylko będę już u siebie.

Edytowane przez swist
10wi68l.png
Odnośnik do komentarza
Udostępnij na innych stronach

Takie coś mi wywaliło:

/** * * @copyright � 2009 �ukasz Rutkowski * @license http://creativecommo...nses/by/3.0/pl/ Creative Commons Uznanie autorstwa 3.0 * */ function repair($tbl, $id) { $sql = new MySQLi('localhost', 'root', '', 'tescik'); //Go to latin1 $sql->query('SET NAMES latin1'); //Get count $cnt = $sql->query('SELECT COUNT(' . $id . ') AS count FROM ' . $tbl); $cnt = $cnt->fetch_assoc(); $cnt = $cnt['count']; //Get records $all = $sql->query('SELECT * FROM ' . $tbl); //Columns $columns = $sql->query('SHOW COLUMNS FROM ' . $tbl); //List columns while($clmn = $columns->fetch_assoc()) { $clmns[] = $clmn['Field']; } //Back to utf8 $sql->query('SET NAMES utf8'); //Generate SET clause while($row = $all->fetch_assoc()) { $i = 0; $set = ''; foreach($clmns as $clmn) { if($clmn != $id) { if($i != 0) { $set .= ', '; } $set .= $clmn . '="' . addslashes($row[$clmn]) . '"'; $i++; } } $sql->query('UPDATE ' . $tbl . ' SET ' . $set . ' WHERE ' . $id . '=' . $row[$id]); } unset($sql); }
Odnośnik do komentarza
Udostępnij na innych stronach

Na początku pliku dodaj :

<?php

a na końcu:

repair('tabela', 'id_rekordu');

?>

Tabela to nazwa tabeli do naprawy, np ibf_forums a id rekordu to tabela z unikalnymi id dla każdego rekordu, czyli w przypadku IPB zawsze nazwa pierwszej tabeli, np 'id' lub 'tid' czy 'forum_id', więcej masz na stronie autora.

Tylko pamiętaj żeby przed operacją wykonać zapytanie SQL

SET NAMES utf8

10wi68l.png
Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.