当前位置: 首页 > 知识库问答 >
问题:

已将mysql字符集更改为utf8,数据库中已有的非拉丁字符现在无法读取

令狐运珧
2023-03-14

我在DB里有几年的数据,99%是拉丁字符。最近,我在mysql连接后添加了以下内容:

mysqli_set_charset($link, "utf8");

现在数据库中所有由亚洲、希伯来等字符组成的现有数据都不再可读,并且显示为垃圾数据。

我如何修复DB中的数据,使其具有utf8字符集的可读性?

表字符集始终为UTF8。唯一改变的是这样一个事实,即在连接期间(如上图所示)设置了一个字符集,而在该行不存在之前。

表的创建相当基本,排序规则是utf8_general_ci

CREATE TABLE `test` (
 COLUMNS + INDEXES
) ENGINE=InnoDB DEFAULT CHARSET=utf8

共有1个答案

壤驷建德
2023-03-14

您现在有了双重编码的数据,在使用utf8作为字符集的连接上读取数据之前,您需要修复这些数据。

这里有一个博客详细解释了如何修复数据:http://www.mysqlperformanceblog.com/2013/10/16/utf8-data-on-latin1-tables-converting-to-utf8-without-downtime-or-double-encoding/

 类似资料:
  • 问题内容: 我的数据库不在UTF8中,我想将所有表都转换为UTF8,我该怎么做? 问题答案:

  • 我试图改变我的编码为utf-8,下面是我到目前为止。 表Charset MBString安装 mbstring在 标题 HTML元标记 超文本标记语言代码 PHP SQL 要插入的PHP 应该存储的数据- 原始数据存储 添加如@Pekka所建议的,输出变成(下面也有评论) 经过一些故障排除,数据部分存储正确。 尝试通过检查字符集,并在拉取的结果上获得。 在检查firefox中的字符集时。 这似乎是

  • null JDBC驱动程序:“mysql-connector-java-5.1.18-bin”

  • 我使用以下命令将数据从. csv文件导入到MySQL数据库表中,就像这样: 然而,由于源代码文件中的一列包含一个非常奇怪的数据,即:,程序拒绝将数据导入MySQL并继续抛出此错误: JAVAsql。SQLException:无效的utf8字符串:“viva Y31L。拉斯塔莫德 我对此进行了搜索,但无法真正理解错误到底是什么,除了字符串“viva Y31L.RastaMod¦ãu Version”

  • 问题内容: 我在从字符串中删除非utf8字符时出现问题,这些字符无法正确显示。像这样的字符0x97 0x61 0x6C 0x6F(十六进制表示) 删除它们的最佳方法是什么?正则表达式还是其他? 问题答案: 使用正则表达式方法: 它搜索UTF-8序列,并将其捕获到组1中。它还与无法标识为UTF-8序列的一部分的单个字节匹配,但不捕获这些字节。替换是捕获到组1中的任何内容。这将有效删除所有无效字节。

  • 问题内容: 使用JDBC驱动程序从Java中的oracle中读取oracle阿拉伯字符时遇到问题,主要问题是我找不到正确的字符编码来获取正确的数据,但是我使用此方法手动解决了问题: 此方法可以给我正确的字符,如数据库中显示的那样,但是当我尝试更新/插入阿拉伯数据时,它将保存错误的字符。例如:我的文本在数据库中另存为“ ?????????” 而不是“مرحبا”。 这是我连接到oracle数据库的方