2017-03-27 12 views
0

私はmysqlのdatabseを持っており、それが文字セットのID latin1_swedish_ciだと一例として、一つの列が(£???Œ?????‡¤????| ???‡??)そのようにつくれ現在のデータを失うことなく、データベースのデータユニコードをlatin1からutf8に変換するにはどうすればよいですか?

これがありますテーブル

-- phpMyAdmin SQL Dump 
-- version 4.0.10deb1 
-- http://www.phpmyadmin.net 
-- 
-- Host: localhost 
-- Generation Time: Mar 27, 2017 at 02:49 PM 
-- Server version: 5.5.44-0ubuntu0.14.04.1 
-- PHP Version: 5.5.9-1ubuntu4.21 

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

-- 
-- Database: `a` 
-- 

-- -------------------------------------------------------- 

-- 
-- Table structure for table `block` 
-- 

CREATE TABLE IF NOT EXISTS `block` (
    `catid` int(12) unsigned NOT NULL AUTO_INCREMENT, 
    `name` varchar(255) NOT NULL, 
    `rtl` int(12) NOT NULL DEFAULT '1', 
    `ratteb` int(11) NOT NULL DEFAULT '0', 
    `comment` text NOT NULL, 
    `showcat` int(11) NOT NULL DEFAULT '0', 
    `nostyle` varchar(255) NOT NULL, 
    `tab` varchar(255) NOT NULL, 
    `additional_locs` varchar(500) DEFAULT NULL, 
    PRIMARY KEY (`catid`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=285 ; 

-- 
-- Dumping data for table `block` 
-- 

INSERT INTO `block` (`catid`, `name`, `rtl`, `ratteb`, `comment`, `showcat`, `nostyle`, `tab`, `additional_locs`) VALUES 
(198, '???â€،?†?آ£?‰ ?آ£?â€‍?????‰', 1, 18, '', 2, '', '', NULL), 
(2, '?â€،???ث†???‹', 2, 1, '', 2, '', '', NULL), 
(3, '?????â€،?? ?â€،???’?آ¦?â€،?â€ک ?â€،???آ£???آ¦?â€،?إ’???آ­?آ¤', 1, 8, '', 2, '', '', NULL); 

の例は、私は文字セットを変更する方法を知っているが、私が変更されたときには、現在のデータは変更されませんでしたuft8します。 古いデータを修正して修正することは可能ですか?

おかげ

UPDATE:

PHPの文字セットがされているWindows-1256

+0

元のテキストがutf8からlatin1にどのように変換されたかによって異なります。バイト単位でテキストが保存されていれば、元のテキストを復元できます。ただし、元のテキストを復元することはできませんでした。 – Shadow

答えて

1

疑問符が出ているので、データは失われます。 latin1にはあなたのキャラクターの一部がエンコードされていなかったので、それはの間に失われました。

最初からやり直してください。

  • エディタなどをお持ちですか? UTF-8に設定します。
  • HTMLフォームは<form accept-charset="UTF-8">のように開始します。
  • バイトをUTF-8としてエンコードしてください。
  • クライアントで使用されているエンコーディングとしてUTF-8を確立します。
  • 列/テーブルには、(SHOW CREATE TABLEに確認してください。)CHARACTER SET utf8mb4を宣言した
  • <meta charset=UTF-8> HTML出力の先頭に。

もっと議論:Trouble with utf8 characters; what I see is not what I stored

おそらくあなたは、私は、Windows-1256と同等だと思うCHARACTER SET cp1256を、必要としていました。

INSERT INTO block...は、mysqldumpの出力のように見えますが、正しく行われていない可能性があります。また、ダンプの前にやり直してください。

アラビア語にはlatin1を使用しないでください。 CHARACTER SET utf8mb4を使用する方が良いでしょうが、英語とアラビア語を超えない場合はutf8またはcp1256が有効です。

0

データベースエンコーディングは、あなたのHTML/PHPのWebページと同じでなければなりません(のは言わせUTF-8)。 これが当てはまる場合、ウェブページに文字が正しく表示されるようにする必要があります。

+0

はい、インターフェイスやHTML/PHPでうまく表示されますが、UTF8に変更して古いデータを変換したい – Ahmed

+0

正しく理解しているかわかりません。あなたのデータベースをUTF-8でエンコードし、すでに保存されているデータを変更後に自動的に変更したいのですか? もしそうであれば、保存されたデータがあなたが望む文字に変更することはできないと思います。たとえば、 "utf8_general_ci"に、HTML/PHPをcharsert = "UTF-8"に設定しても、Webページを表示するのに問題はありません。 –

関連する問題