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

将table的所有数据(既有编码数据)转换为utf8或latin1的单一编码

沈华皓
2023-03-14

我们有一个由两种不同的编码数据(utf8和latin1)组成的表,这两种编码数据是从两个不同的应用程序用例中插入的。如果我们以一种编码获得数据,我们会遇到其他语言文本的字符串问题。我们需要将总的表数据转换为单一编码。

例如:表X编码的id名称数据

如果我们使用“latin1”连接字符集,我们会遇到“ébarber”(断字符串)的问题。如果我们使用“utf8”连接字符集,我们就会遇到“a gogo”(断串)的问题。

我们如何将该表数据转换为utf8或latin1的单一编码<请分享您对解决此问题的想法。

共有1个答案

商昂然
2023-03-14

有可能。但很痛苦。

  1. 转换为BINARY
  2. 确定哪些行包含哪些编码。这可以自动化,但可能不是100%正确。
  3. 对这些行执行特殊的UPDATE
  4. 转换为utf8

细节:

第1步:转换为二进制:

ALTER TABLE Tbl MODIFY COLUMN col VARBINARY(...) ...; -- with suitable matching other stuff, or
ALTER TABLE Tbl MODIFY COLUMN col BLOB ...;  -- if it were TEXT.

第2步:查找拉丁文1行(否定以下内容):

<代码>选择十六进制(列) 提取十六进制用于下面的regexp

此正则表达式检查utf8(实际上是utf8mb4):

/^(
     [\xC2-\xDF] [\x80-\xBF]

   |  \xE0[\xA0-\xBF][\x80-\xBF]
   | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}
   |  \xED[\x80-\x9F][\x80-\xBF]

   |  \xF0[\x90-\xBF][\x80-\xBF]{2}
   | [\xF1-\xF3][\x80-\xBF]{3}
   |  \xF4[\x80-\x8F][\x80-\xBF]{2}
)+/ox

结合这些应该可以告诉您一行是否可能是utf8。

第3步:将列(列)从latin1编码转换为utf8:

CONVERT(CONVERT(col USING latin1) USING utf8)

第4步:将其设置为utf8:

ALTER TABLE Tbl MODIFY COLUMN col VARCHAR(...) ... CHARACTER SET utf8 ...; -- or
ALTER TABLE Tbl MODIFY COLUMN col TEXT ... CHARACTER SET utf8 ...;

警告虽然我告诉你们的内容的各个部分都是有效的,但拼凑在一起的组合还没有经过测试。我强烈怀疑会有某种形式的打嗝。

 类似资料:
  • 我有一个UTF8 mysql数据库,我必须导入一个latin1表。我希望导入后可以修复数据错误。是一张巨大的桌子,里面有我国所有的地址。因此数据显示如下: 我遵循一个提示说,我应该将所有TEXT字段转换为BLOB,它们将表转换为UTF8,最后将BLOB字段更改回TEXT。 以下是参考资料:https://www.percona.com/blog/2013/10/16/utf8-data-on-la

  • 问题内容: 直到今天,我才意识到我的PHP脚本中缺少此功能: 我所有的表都是InnoDB,归类为“ utf8_unicode_ci”,我所有的VARCHAR列也均为“ utf8_unicode_ci”。我有我的PHP脚本,和我所有的PHP文件编码为UTF-8。 因此,直到现在,每次我用变音符号“插入”某些东西时,例如: 在这种情况下,“名称”内容为:。 由于我固定了PHP和MySQL之间的字符集,

  • 我继承了一个需要进一步开发的web系统。该系统似乎是由阅读了PHP教程两章的人创建的,他认为自己可以编写代码。。。 所以网页本身是UTF8格式的,显示并输入其中的所有内容。数据库表是用UTF8字符集创建的。但是,在配置中,有“SET NAMES LATIN1”。换句话说,UTF8编码的字符串用强制拉丁1编码填充到数据库中。 有没有一种方法可以将这些乱七八糟的东西转换为实际存储在utf8中并摆脱la

  • 问题内容: 我们有一个MySQL InnoDB表,其中包含约10列由base64编码的小型javascript文件和由base64编码的png(小于2KB大小)图像。 插入的次数很少,但读取次数却很多,但是输出会在Memcached实例上缓存几分钟,以避免后续的读取。 现在,我们正在使用这些列,但是我想知道在性能或快照备份方面切换到数据类型是否有优势。 我的搜索挖掘表明,和我的情况接近相同的,因为

  • 问题内容: 我有一个包含两列的表: 我需要在PostgreSQL中进行某种形式的一键编码并将表转换为: 是否可以仅使用SQL?有关如何入门的任何提示? 问题答案: 如果我正确理解,则需要条件聚合:

  • 我正在编写一个使用RSA密码和AES密码的公钥和私钥加密算法的实现。在这种方法中,AES密钥应该使用RSA密码流进行解密。 FileInputStream为我提供了编码密钥(这不是问题),但当通过CipherInputStream时,数据会变成全零。 aesKey和aesKeySpec是静态变量,privateKey是有效的RSA密钥。 任何帮助在发现问题将不胜感激!