首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将非utf 8数据库转换为utf-8

将非utf 8数据库转换为utf-8
EN

Stack Overflow用户
提问于 2015-06-12 21:25:29
回答 2查看 577关注 0票数 0

很长一段时间以来,我一直使用错误编码的数据库/连接,导致数据库中的希伯来语字符显示为未知语言字符,如下例所示:

我希望用插入错误编码的字符重新导入/更改数据库,以便将希伯来字符显示为希伯来字符,而不是像*"× ×תה מסכי×,×× ×©×™× ×ž×¦×™×¢×™× ×œ×™ כמה ×”× "*那样以未知解析方式显示。

作为记录,当我用php显示这个未知字符sql数据时,它显示为希伯来语。当我试图从phpMyAdmin面板访问它时,它显示为jibrish (这些未知字符)。

尽管数据库中已经插入了一些数据,但是否有任何方法来修复它呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-24 22:36:52

感觉就像“双重编码”希伯来字符串。

这部分恢复了案文:

代码语言:javascript
复制
UNHEX(HEX(CONVERT('× ×תה מסכי×,××' USING latin1))) 
-->  '� �תה מסכי�,�� 

我不知道是什么导致了符号。

请给一些手机做SELECT col, HEX(col) FROM ... WHERE ...;。如果存储正确,我希望שלום会给出十六进制D7A9D79CD795D79D。对于“双重编码”,我希望是C397C2A9C397C593C397E280A2C397C29D

请提供该选择的输出,然后我将工作如何恢复数据。

编辑

我认为发生了这样的事。

  • 客户端的字符编码为utf8;以及
  • SET NAMES latin1撒谎声称客户端具有latin1编码;以及
  • 表中的列声明为CHARACTER SET utf8

Yod没有像一封信那样跳出来,所以花了一段时间才看到它。CONVERT(BINARY(CONVERT('×™×™123' USING latin1)) USING utf8) ->יי123

因此,我认为这句话会使文本变得清晰。但是要小心,在“修复”整个表之前,先在几行上尝试一下。

代码语言:javascript
复制
UPDATE table SET col = CONVERT(BINARY(CONVERT(col USING latin1)) USING utf8) WHERE ...;

如果这不起作用,下面是4修复双重编码,它可能等效,也可能不等效。(注:BINARY(xx)可能与CONVERT(xx USING binary)相同。)

票数 1
EN

Stack Overflow用户

发布于 2015-06-12 22:00:42

我不确定您是否能够对已经存储在数据库中的数据做任何事情。但是,您可以通过确保拥有正确的字符集和排序规则来正确导入希伯来语数据。

  1. 数据库排序规则必须是utf8_general_ci
  2. 用希伯来语整理表必须是utf8_general_ci

例如:

CREATE DATABASE col CHARACTER SET utf8 COLLATE utf8_general_ci;

代码语言:javascript
复制
CREATE TABLE `col`.`hebrew` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `heb` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`id`)
  ) CHARACTER SET utf8
  COLLATE utf8_general_ci;

INSERT INTO hebrew(heb) values ('שלום');

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30812412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档