当前位置: 首页 > 面试题库 >

更改大型数据表的字符集的更好方法是哪种?

时恩
2023-03-14
问题内容

在我的生产数据库中,使用默认字符集“
latin”创建了与警报相关的表,因此,当我们尝试在表中插入日文字符时遇到错误。我们需要将表和列的默认字符集更改为UTF8。由于这些表中包含大量数据,Alter命令可能会花费很多时间(在具有相同数据量的本地DB中花费了5个小时)并锁定了表,这将导致数据丢失。我们是否可以计划一种将字符集更改为UTF8而不丢失数据的机制。

更改大型数据表的字符集的更好方法是哪种?


问题答案:

我在mysql手册http://dev.mysql.com/doc/refman/5.1/en/alter-
table.html
上找到了这个:

在大多数情况下,ALTER
TABLE会创建原始表的临时副本。MySQL等待其他正在修改表的操作,然后继续。它会将更改合并到副本中,删除原始表,然后重命名新表。在执行ALTER
TABLE时,其他会话可以读取原始表。在ALTER
TABLE操作开始之后开始的对表的更新和写入将被暂停,直到新表准备就绪为止,然后自动重定向到新表,而不会进行任何失败的更新

所以是的-在执行此操作时最大程度地减少停机时间是很棘手的。这取决于表的使用情况配置文件,是否还有更多的读/写操作?

我能想到的一种方法是使用某种复制。因此,创建一个使用UTF-8的新Alert表,并找到一种在不影响可用性/吞吐量的情况下将原始表复制到新表的方法。复制完成(或足够接近)后,通过重命名切换表?

当然这说起来容易做起来难-甚至有可能需要更多的学习。



 类似资料:
  • 问题内容: 哪种资本化方法更好? 矿: 要么 公用语言-StringUtils.capitalize: 我认为我更好,但我宁愿问。 问题答案: 表现是平等的。 您的代码复制了char []调用和。 关于Apache代码和。apache代码有一个额外的字符串实例,该实例具有基本char [1,length]内容。但这在创建实例String时不会被复制。

  • 问题内容: 我正在学习python并进行练习: 字符串。创建一个函数,该函数将返回另一个与输入字符串相似的字符串,但大小写取反。例如,输入“ Mr. Ed”将得到“ mR。eD”作为输出字符串。 我的代码是: 有没有更好的解决方法?我的解决方案似乎很奇怪。 问题答案: 您的解决方案非常好。但是,您不需要三个分支,因为在upper不适用时将返回str。 使用生成器表达式,可以将其简化为:

  • 问题内容: 我对选择两种方法感到困惑。 方案 有两个表,并分别。包含用户数据,例如名字,姓氏等 包含每个用户拥有的汽车及其说明。即,等等 现在,如果我想获得所有用户的所有信息,那么哪种方法最好在最短的时间内完成? 方法1。 查询其中的所有行,并将它们全部存储在ex的列表中。 然后循环浏览列表并对其进行查询,并根据第一步中保存的用户从中获取数据。 方法2 查询所有行,并在保存该行时从中获取所有值并保

  • 问题内容: 我们需要将某些列的数据类型从int更改为bigint。不幸的是,其中一些表很大,大约有7-10百万行(但不宽)。 Alter表alter列将永远保留在这些表上。有没有更快的方法来实现这一目标? 问题答案: 巧合的是,大约3个小时前,我不得不做一些非常相似的事情。该表是3500万行,它相当宽,并且花了很多时间才能做到这一点: 这就是我最终得到的结果: 这次,这些陈述几乎是即时的。(在速度

  • 从这个问题Java:获得最大公约数 在获取任何数据类型的gcd时,无论是,,,,哪个答案在精度,速度,cpu使用等方面更好? A: B:

  • 我的CRM将以下JSON发送到我的WebHook: 向google ads发送信息需要特定的数据格式: 我想创建一个具有以下格式的json: 为此,我应该更改两个created_at键 1)2020-05-09T22:06:29.049670Z至2020-05-09T22:06:29-05:00(去掉.049670Z,增加-05:00) 2)2020-05-09T19:06:29.049-05:0