phpmyadmin MySQL数据库导入导致特殊字符问题(č)

fafcakar  于 2022-11-09  发布在  PHP
关注(0)|答案(1)|浏览(186)

你好,我最近为我的网站更换了托管服务器。当我这样做的时候,我导出了我以前的cpanel phpmyadmin中的mysql数据库。它有CHARACTER SET latin1和COLLATE latin1_swedish_ci。当我将它导入到我的新phpmyadmin中后,我发现在显示捷克语的字符时出现了一个问题,这些字符看起来像问号或奇怪的符号等。我也没有注意到,我的网站已经被修改了。一开始我无法插入这些字母,但是在将表CHARSET更改为utf8之后,我就可以插入它们了。但是,我如何从旧数据库中导出数据,并将其导入到新数据库中,而不使数据混乱呢?下面是数据库的外观:

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
    SET AUTOCOMMIT = 0;
    START TRANSACTION;
    SET time_zone = "+00:00";

    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8mb4 */;

    --
    -- Database: `sambajiu_samba`
    --

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

    CREATE TABLE `bookings` (
      `id` int(11) NOT NULL,
      `fname` varchar(100) NOT NULL,
      `surname` varchar(100) DEFAULT NULL,
      `email` varchar(255) NOT NULL,
      `telephone` varchar(100) NOT NULL,
      `age_group` varchar(100) DEFAULT NULL,
      `hear` varchar(100) DEFAULT NULL,
      `experience` text,
      `subscriber` tinyint(1) DEFAULT NULL,
      `booking_date` varchar(255) DEFAULT NULL,
      `lesson_time` varchar(255) NOT NULL,
      `booked_on` datetime DEFAULT CURRENT_TIMESTAMP
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

    ALTER TABLE `bookings` ADD PRIMARY KEY (`id`);

    ALTER TABLE `bookings` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=345;
bnlyeluc

bnlyeluc1#

捷克语不能用latin1来处理。最好使用utf8mb4(它几乎可以处理世界上的任何东西)。在MySQL之外,它被称为“UTF-8”。
你是怎么“导出”和“导入”的?文件里有什么?你能得到导出文件的一小部分的十六进制吗--我们需要检查捷克字符使用的是什么编码。
对于“作为问号或怪异符号”,请参见Trouble with UTF-8 characters; what I see is not what I stored中的问号和乱码。
你的咒语可能是想说

Rezervovat trénink zda

在十六进制的中间是

C383 C2A9

é是UTF-8。当你显示数据时,你可能会看到它,或者你可能会看到你想要的é。在后一种情况下,浏览器 * 可能 * 通过两次解码数据来“帮助”你。有关这方面的进一步讨论,请参见上面链接中的“双重编码”。
“修复数据”相当混乱:

CONVERT(BINARY(CONVERT(CONVERT(
 UNHEX('52657A6572766F766174207472C383C2A96E696E6B207A6461') 
   USING utf8mb4) USING latin1)) USING utf8mb4)

==> 'Rezervovat trénink zda'

但是,我不认为我们已经完成了。acute-e是一个有效的字符在拉丁1。你提到的4个捷克重音字母,我认为,不是在拉丁1。拉丁5和dec 8 * 可能 * 相关。

相关问题