提问人:admec986 提问时间:10/17/2022 最后编辑:admec986 更新时间:10/18/2022 访问量:785
MySQL Database import cause issue special characters (ě ř č ů)
MySQL Database import causing issue special characters (ě ř č ů)
问:
嗨,我最近更改了我网站的托管服务提供商。执行此操作时,我导出了之前的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;
答:
0赞
Rick James
10/17/2022
#1
捷克语不由 处理。最好使用(几乎可以处理世界上的所有事情)。在MySQL之外,它被称为“UTF-8”。latin1
utf8mb4
你是如何做到“出口”和“进口”的?文件中有什么?你能得到导出文件的一小部分的十六进制吗 - 我们需要检查捷克语字符使用的编码。
至于“作为问号或奇怪的符号”,请参阅 UTF-8 字符的麻烦中的问号和 Mojibake; 我看到的不是我存储的。
你的十六进制可能想说
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 是 latin1 中的有效字符。你提到了 4 个捷克口音的字母,我认为这些字母不是拉丁语1。Latin5 和 dec8 可能是相关的。
评论
0赞
admec986
10/17/2022
我使用phpmyadmin做到了。我在问题中添加了数据库的示例
0赞
Rick James
10/18/2022
@admec986 - 之前和之后都在桌子上吗?转储和加载是否有任何参数?在之前/之后与数据库的连接的默认字符集是什么?DEFAULT CHARSET=utf8;
0赞
admec986
10/18/2022
不,当我导入它时,它是 CHARSET=latin1,但由于这不允许以格式编写特殊字符,因此我将其更改为 utf8。然而,这并没有解决所有原始数据完全混乱的问题。我从中导入和导出到的两个phpmyadmin都具有服务器连接排序规则:utf8mb4_unicode_ci。我不认为我刚刚单击了导出或导入按钮的任何参数
0赞
Rick James
10/18/2022
对于少量数据,我可以帮助您确定损坏程度。 显示磁盘上的实际内容;所有的“字符集”线索都不太确定。SELECT col, HEX(col) FROM ... WHERE ...
HEX()
0赞
admec986
10/18/2022
好的,所以我为一个名为 home_section_five 的表运行了这个:SELECT s5_btn1, HEX(s5_btn1) FROM home_section_five WHERE id=1;;;它返回 52657A6572766F766174207472C383C2A96E696E6B207A6461...
评论