2017-03-27 81 views
0

我有MySQL的DATABSE和它的字符集ID latin1_swedish_ci和如實施例一列apear像(OE ?????‡???£¤|?????????‡)如何將數據庫中的數據unicode從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

既然你有問號出來,數據就會丟失。它在INSERT期間丟失了,因爲latin1對你的某些角色沒有編碼。

重新開始。

  • 讓你的編輯/等。設置爲UTF-8。
  • HTML表單應該以<form accept-charset="UTF-8">開頭。
  • 將您的字節編碼爲UTF-8。
  • 建立UTF-8作爲客戶端使用的編碼。
  • 有列/表聲明CHARACTER SET utf8mb4(請與SHOW CREATE TABLE。)
  • <meta charset=UTF-8>在HTML輸出的開始。

更多討論:Trouble with utf8 characters; what I see is not what I stored

也許你需要CHARACTER SET cp1256,我認爲這是相當於到Windows 1256。

由於INSERT INTO block...看起來像mysqldump的輸出,因此可能做得不正確。再次重申,重新開始,但在轉儲之前。

請勿使用latin1作爲阿拉伯語。使用CHARACTER SET utf8mb4會更好,但如果您不超過英語和阿拉伯語,則utf8cp1256會起作用。

0

你的數據庫編碼應與您的HTML/PHP網頁(比方說UTF-8)。 如果是這種情況,您的網頁應該正確顯示字符,即使它存儲在您的數據庫中。

+0

是的,它在界面或HTML/PHP中顯示效果不錯,但我想將其更改爲UTF8並轉換舊數據 – Ahmed

+0

我不確定自己的理解是否正確。你想讓數據庫以UTF-8編碼,並且已經存儲在其中的數據在更改後自動更改? 如果是這樣,我認爲存儲的數據不會變成您想要的字符。儘管如果你將它設置爲「utf8_general_ci」,而你的HTML/PHP也可以設置爲charsert =「UTF-8」,你應該沒有任何問題可以顯示網頁。 –

相關問題