gpt4 book ai didi

mysql - 有人可以帮助我理解为什么我应该或不应该将所有列从 latin1_swedish_ci 转换为 utf8_unicode_ci 吗?

转载 作者:行者123 更新时间:2023-11-29 00:38:11 29 4
gpt4 key购买 nike

我知道这个问题已经被问过很多次了,但我很难理解整理和编码的区别。

好的,我们有一个 MySQL 数据库(实际上有几个),其中的表具有混合排序规则。现在,有些列是 utf8_unicode_ci,有些是默认的 latin1_swedish_ci。我们已经使用 utf8_unicode_ci 作为默认值。但是我们在 latin1 中有很多“遗留”列。

我们喜欢一致性,并希望将所有列转换为 utf8。幸运的是,我们 99.9% 的数据都是英文的,其中有几条记录(字面意思)是西类牙地址(波浪号)。对我们来说非常简单的东西,但我们想以“正确的方式”来做,并完全支持任何语言。因此,utf8_unicode。

我们宁愿不必遍历每个表中的每一列并进行更改。是否有一个简单的脚本可以将每一列转换为 utf8_unicode_ci

此外,我们需要寻找哪些陷阱?我的意思是,如果我错了并且有我不知道的俄语或日语记录,那么我会有问题吗?

也许这应该是一个附带问题,但对于编码,UTF8 更好,因为它可以存储任何语言,对吗?比如,每个字符将有 2 或 4 个字节来表示它在数千个字符的“全局”字母表中应该是什么?对不起,如果这个类比听起来很愚蠢但试图理解。排序规则就是我查询时它们的排序方式。因此,如果字符存储为 A8 9F 用于字母 HB3 2E 用于字母 e 然后H 会先出现,因为 A8 出现在 B3 之前?

哈,我现在头晕目眩。抱歉,如果这似乎是三个不同的问题,但是当我去管理部门并说我需要转换列时,这就是为什么......

谢谢

最佳答案

想到的最简单的方法是:

  1. 创建备份数据库create database olddb like dbname ;
  2. 将所有数据和结构导出到转储:mysqldump dbname > dbname.sql
  3. 将所有内容导入您的备份:mysql -D olddb < dbname.sql
  4. 只导出表结构:mysqldump --no-data olddb > structure.sql
  5. 用您选择的文本编辑器打开 structure.sql 并替换所有 latin1_swedish_ciutf8_unicode_ci
  6. 删除你的数据库:drop database dbname轻松清除所有表格。
  7. 使用 utf8 重新创建数据库:create schema dbname default character set utf8 collate utf8_swedish_ci
  8. 将改变后的结构导入新数据库:mysql -D dbname < structure.sql .此时,您应该在 olddb 中拥有整个旧数据库,在 dbname 中拥有一个空的、完全 utf8 数据库。
  9. 为数据库中的每个表使用 insert into dbname.tbl select * from olddb.tbl .如果有很多表,您可以生成一个 sql 脚本来通过导出 show tables from olddb 的输出来执行此操作并在其周围添加插入 sql。
  10. 检查结果,如果您满意,drop database olddb

这个过程可能会更短一些,不幸的是 MySQL 不再支持数据库重命名。

关于mysql - 有人可以帮助我理解为什么我应该或不应该将所有列从 latin1_swedish_ci 转换为 utf8_unicode_ci 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13398794/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com