2015-10-24 3 views
3

У меня есть база данных, которая имеет внесенные, который имеет столбец с именем «имени»Преобразование искаженных символов из базы данных

В этом имени, например у меня есть поле, которое имеет значение: 대한민국•KOREA

Чтобы получить моя таблица была заполнена, я должен был использовать файл SQL, который имел длину в 99 тыс. строк, и у него были поля, заполненные как таковые ...

Теперь я могу сделать свой PHP-скрипт так, чтобы он дал мне фактическое представление, которое мне нужно для символов, которые должны быть 대한민국•KOREA

Я проверил конфигурацию своего сервера. Apache, PHP, MySQL все UTF-8 набор и готов ...

Update

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; 
SET time_zone = "+00:00"; 

CREATE TABLE IF NOT EXISTS `activeclans` (
    `id` bigint(11) NOT NULL, 
    `name` text CHARACTER SET utf8 NOT NULL, 
    `location` text CHARACTER SET utf8 NOT NULL, 
    `playercount` int(11) NOT NULL, 
    `clanlevel` int(11) NOT NULL, 
    `score` int(11) NOT NULL, 
    `warswon` int(11) NOT NULL, 
    `warslost` int(11) NOT NULL, 
    `warstied` int(11) NOT NULL, 
    UNIQUE KEY `id` (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci; 

-- 
-- Daten für Tabelle `activeclans` 
-- 

INSERT INTO `activeclans` (`id`, `name`, `location`, `playercount`, `clanlevel`, `score`, `warswon`, `warslost`, `warstied`) VALUES 
(1669110, '벽치는 골렘들 #.#', 'South Korea', 48, 6, 21589, 44, 18, 1), 
(1707076, 'THE HURRIKANEZ', 'International', 29, 5, 20241, 39, 17, 3), 
(1710048, '+WARLORDS+', 'India', 42, 3, 20700, 5, 49, 0), 
(1748604, 'الحجايا', 'Jordan', 40, 4, 21218, 27, 13, 2), 
(1749793, 'Vindicaâž•ed', 'International', 50, 5, 22212, 32, 18, 4), 
(1755056, 'Hunter hogs 101', 'United States', 44, 3, 20501, 5, 23, 2), 
(1761757, 'دعم وحرب', 'Saudi Arabia', 45, 1, 22373, 0, 7, 0), 
(1764157, 'tiwi warriors', 'Morocco', 49, 5, 21663, 36, 13, 3), 
(1785753, 'INCAUDA VENENUM', 'France', 41, 4, 20412, 25, 8, 1), 
(1797817, 'QUEENofURAGONs', 'Philippines', 49, 5, 24104, 38, 8, 1), 
(1829886, 'Max clasher', 'Philippines', 43, 5, 20076, 32, 12, 0), 
(1837025, 'DUCATO ACCADEMY', 'Italy', 38, 3, 22227, 12, 12, 1), 
(1845435, 'shoook tower', 'Iran', 44, 4, 21531, 30, 10, 0), 
(1876715, '無言', 'Japan', 48, 4, 20178, 5, 25, 0), 
(343597774219, 'CLASH O'' TRASH', 'United States', 46, 1, 20790, 0, 0, 0); 

/*!40101 SET [email protected]_CHARACTER_SET_CLIENT */; 
/*!40101 SET [email protected]_CHARACTER_SET_RESULTS */; 
/*!40101 SET [email protected]_COLLATION_CONNECTION */; 

Это часть Sql файла.

Моя связь с Db выглядит следующим образом:

<?php 
$con = new mysqli("localhost", "beep", "beep", "beep"); 

if ($con->connect_errno) { 
    printf("Connect failed: %s\n", $con->connect_error); 
    exit(); 
} 
?> 

И я это для отображения данных:

$table = " 
<table border='1' align='center' cellspacing='3' cellpadding='3' style='border-collapse:collapse;'> 
    <tr> 
     <td>Clan ID</td> 
     <td>Clan Name</td> 
     <td>Location</td> 
     <td>Player Count</td> 
     <td>Clan Level</td> 
     <td>Score</td> 
     <td>Wars Won</td> 
     <td>Wars Lost</td> 
     <td>Wars Tied</td> 
    </tr>"; 


$clanResultQuery = "SELECT * FROM activeclans ORDER BY score DESC LIMIT 100"; 

if($activeClansResult = mysqli_query($con,$clanResultQuery)){ 
    while($row = mysqli_fetch_array($activeClansResult)){ 
     $table .=" 
     <tr> 
      <td>".$row['id']."</td> 
      <td>".$row['name']."</td> 
      <td>".$row['location']."</td> 
      <td>".$row['playercount']."</td> 
      <td>".$row['clanlevel']."</td> 
      <td>".$row['score']."</td> 
      <td>".$row['warswon']."</td> 
      <td>".$row['warslost']."</td> 
      <td>".$row['warstied']."</td> 
     </tr>"; 
    } 
} 

$table .= "</table>"; 
+0

Вы должны проверить кодировку БД-источника и назначения, а также кодировка символов вашего файла SQL. Вероятно, он был установлен на latin1 или аналогичен в какой-то момент процесса. –

+0

@ BrianKeller-Heikkila Теперь я не могу изменить файл SQL. –

+0

Что такое кодировка символов в файле? Это похоже на правильные корейские персонажи или мусорные персонажи? Если это мусорные символы (и вы уверены, что ваш зритель может показать корейский), то, боюсь, вам, вероятно, понадобится создать новый файл SQL, который является UTF-8 (или любой другой символ, кодирующий исходный db). –

ответ

0

Ваши наборы символов перепутались. Ваши данные находятся в latin1 (Windows-1252), но MySQL считает, что это UTF-8.

Скорее всего, что в прошлом система, использующая UTF-8, подключалась к MySQL с использованием набора символов latin1, и это произошло из-за того, что изначально возникла комбинация.

Всякий раз, когда вы подключаетесь к экземпляру MySQL, он помогает, если клиент информирует MySQL о том, какой набор символов и сортировка он использует, как это.

SET NAMES utf8; 

Оставьте это, и вы можете быть в мире боли, когда пытаетесь перенести свою базу данных.

Чтобы исправить свои данные, вам нужно экспортировать, выполнять некоторые замены и импортировать данные снова - всегда проверяйте резервную копию, прежде чем пытаться на своем реальном сервере! Это будет работать на большинстве систем на базе Linux.

mysqldump -u _USER_ -h _HOST_ -p --add-drop-table --default-character-set=latin1 _DNNAME_ > mydata.sql 

sed -i -e 's/CHARSET=latin1/CHARSET=utf8/ig' -e 's/latin1_bin/utf8_bin/ig' -e 's/latin1_swedish_ci/utf8_general_ci/ig' -e 's/SET NAMES latin1/SET NAMES utf8/ig' -e 's/CHARACTER SET latin1/CHARACTER SET utf8/ig' mydata.sql 

mysql -u _USER_ -h _HOST_ -p _DNNAME_< mydata.sql 

Что команды сделать дамп базы данных в это существующая форма - latin1. Затем usse sed заменить все утверждения относительно набора символов данных от latin1 до utf-8. Когда вы импортируете, MySQL теперь увидит данные как utf-8 и отобразит их как таковые. Не забудьте сначала протестировать первую копию, проблемы с наборами символов могут быть неудобными для полного разрешения.

Когда все это сделано, убедитесь, что вы используете команду set names после подключения MySQL, чтобы сообщить серверу, что набор символов ваш клиент работает в.

+0

Спасибо - большая помощь :) –

Смежные вопросы