2017-03-27 60 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”,你应该没有任何问题可以显示网页。 –

相关问题