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

Brak polskich znaków w e-mail'ach od forum


haerde

Rekomendowane odpowiedzi

UTF-8 pomieszane z latin1 jak się domyślam... Ja to widzę tak:

Sprawdź kodowanie bazy po obu stronach przez zapytanie SQL

SHOW VARIABLES LIKE 'character_set_database';

SHOW VARIABLES LIKE 'character_set_client';

Ewentualnie sprawdź możliwe zestawy znaków i metody porównań

SHOW CHARACTER SET;

SHOW COLLATION LIKE 'utf8%';

Ustaw kodowanie dla bazy od strony serwera, bazy, tabeli, połączenia

Serwer (/etc/my.cnf)

[mysqld]

default-character-set=utf8 
default-collation=utf8_general_ci 

Naza danych

(CREATE | ALTER) DATABASE ... DEFAULT CHARACTER SET utf8

Tabela

(CREATE | ALTER) TABLE ... DEFAULT CHARACTER SET utf8

Połączenie

SET NAMES 'utf8';

Teraz najlepiej posłużyć się skryptem do konwersji bazy, oczywiście wcześniej backup. Nie jestem pewien czy konkretnie z tego skryptu korzystałem, ale powinien być ok:

<?php

// this script will output the queries need to change all fields/tables to a different collation
// it is HIGHLY suggested you take a MySQL dump prior to running any of the generated
// this code is provided as is and without any warranty

die("Make a backup of your MySQL database then remove this line");

set_time_limit(0);

// collation you want to change:
$convert_from = 'latin1_swedish_ci';

// collation you want to change it to:
$convert_to   = 'utf8_general_ci';

// character set of new collation:
$character_set= 'utf8';

$show_alter_table = true;
$show_alter_field = true;

// DB login information
$username = 'user';
$password = 'pass';
$database = 'table';
$host     = 'localhost';

mysql_connect($host, $username, $password);
mysql_select_db($database);

$rs_tables = mysql_query(" SHOW TABLES ") or die(mysql_error());

print '<pre>';
while ($row_tables = mysql_fetch_row($rs_tables)) {
   $table = mysql_real_escape_string($row_tables[0]);

   // Alter table collation
   // ALTER TABLE `account` DEFAULT CHARACTER SET utf8
   if ($show_alter_table) {
       echo("ALTER TABLE `$table` DEFAULT CHARACTER SET $character_set;\r\n");
   }

   $rs = mysql_query(" SHOW FULL FIELDS FROM `$table` ") or die(mysql_error());
   while ($row=mysql_fetch_assoc($rs)) {

       if ($row['Collation']!=$convert_from)
           continue;

       // Is the field allowed to be null?
       if ($row['Null']=='YES') {
           $nullable = ' NULL ';
       } else {
           $nullable = ' NOT NULL';
       }

       // Does the field default to null, a string, or nothing?
       if ($row['Default']=='NULL') {
           $default = " DEFAULT NULL";
       } else if ($row['Default']!='') {
           $default = " DEFAULT '".mysql_real_escape_string($row['Default'])."'";
       } else {
           $default = '';
       }

       // Alter field collation:
       // ALTER TABLE `account` CHANGE `email` `email` VARCHAR( 50 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL
       if ($show_alter_field) {
           $field = mysql_real_escape_string($row['Field']);
           echo "ALTER TABLE `$table` CHANGE `$field` `$field` $row[Type] CHARACTER SET $character_set COLLATE $convert_to $nullable $default; \r\n";
       }
   }
}

?>

Zrobisz w takiej kolejności i powinno hulać.

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ę.