如何将数据库中的数据unicode从latin1转换为utf8而不丢失当前数据?

时间:2017-03-27 11:51:28

标签: mysql unicode

我有mysql数据库,它的charset id是latin1_swedish_ci,例如一个列apear就像那样(?Œ??????‡???????????????????

这是表格的例子

-- 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时,当前数据没有改变。 我想知道是否有可能修复旧数据以纠正一个?

感谢

更新:

php中的charset是windows-1256

2 个答案:

答案 0 :(得分:1)

由于您有问号,数据会丢失。它在INSERT期间丢失了,因为latin1没有对某些角色进行编码。

重新开始。

  • 有你的编辑/等。设置为UTF-8。
  • HTML表单应该像<form accept-charset="UTF-8">
  • 一样开始
  • 将您的字节编码为UTF-8。
  • 将UTF-8建立为客户端中使用的编码。
  • 将列/表声明为CHARACTER SET utf8mb4(使用SHOW CREATE TABLE检查。)
  • HTML输出开头的
  • <meta charset=UTF-8>

更多讨论: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会有效。

答案 1 :(得分:0)

您的数据库编码应与您的HTML / PHP网页相同(让我们说UTF-8)。 如果是这种情况,您的网页应该正确显示字符,即使它在您的数据库中存储奇怪。