Bootstrap

latin1_swedish_ci(latin1 不支持存储中文、日文、韩文等多字节字符)

1、SHOW TABLE STATUS WHERE Name = ‘batch_version’;

mysql> SHOW TABLE STATUS WHERE Name = 'batch_version';
+---------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+----------------+---------+
| Name          | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time         | Update_time         | Check_time | Collation         | Checksum | Create_options | Comment |
+---------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+----------------+---------+
| batch_version | MyISAM |      10 | Dynamic    |    6 |             32 |         196 | 281474976710655 |         2048 |         0 |              7 | 2024-11-27 18:02:32 | 2025-01-10 15:39:03 | NULL       | latin1_swedish_ci |     NULL |                |         |
+---------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+----------------+---------+
1 row in set (0.00 sec)

2、latin1_swedish_ci

latin1_swedish_ci 是 MySQL 中的一种字符集和排序规则组合。具体含义如下:

  • 字符集(Character Set): latin1

    • latin1 是 ISO 8859-1 的别名,支持西欧语言(如英语、法语、德语、西班牙语等)。
    • 它使用单字节编码,每个字符占用 1 个字节。
  • 排序规则(Collation): swedish_ci

    • swedish_ci 表示基于瑞典语的排序规则,ci 表示大小写不敏感(case-insensitive)。
    • 这种排序规则会将大小写字母视为相同(例如 Aa 是等价的)。

使用场景

  • 如果你的数据主要是西欧语言(如英语、法语等),并且不需要支持多字节字符(如中文、日文等),latin1_swedish_ci 是一个常见的选择。
  • 它是 MySQL 的默认字符集和排序规则(在旧版本中)。

注意事项

  1. 不支持多字节字符

    • latin1 不支持存储中文、日文、韩文等多字节字符。如果需要存储这些字符,建议使用 utf8mb4 字符集。
  2. 排序规则的影响

    • 排序规则会影响字符串的比较和排序。例如,swedish_ci 会将 Aa 视为相同,而 bin(二进制排序规则)则会区分大小写。
  3. 迁移到 UTF-8

    • 如果你的应用需要支持多语言,建议将字符集迁移到 utf8mb4,并使用 utf8mb4_unicode_ciutf8mb4_general_ci 排序规则。

修改字符集和排序规则

如果需要将表或列的字符集和排序规则修改为 latin1_swedish_ci,可以使用以下 SQL 语句:

修改表的字符集和排序规则
ALTER TABLE 表名 
CONVERT TO CHARACTER SET latin1 COLLATE latin1_swedish_ci;
修改列的字符集和排序规则
ALTER TABLE 表名 
MODIFY 列名 列类型 CHARACTER SET latin1 COLLATE latin1_swedish_ci;
修改数据库的默认字符集和排序规则
ALTER DATABASE 数据库名 
CHARACTER SET = latin1 COLLATE = latin1_swedish_ci;

如果你有更多问题,欢迎随时提问!

3、ALTER TABLE batch_version CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

4、SHOW TABLE STATUS WHERE Name = ‘batch_version’;

mysql> SHOW TABLE STATUS WHERE Name = 'batch_version';
+---------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+--------------------+----------+----------------+---------+
| Name          | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time         | Update_time         | Check_time | Collation          | Checksum | Create_options | Comment |
+---------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+--------------------+----------+----------------+---------+
| batch_version | MyISAM |      10 | Dynamic    |    6 |             32 |         196 | 281474976710655 |         2048 |         0 |              7 | 2025-01-17 14:17:25 | 2025-01-10 15:39:03 | NULL       | utf8mb4_general_ci |     NULL |                |         |
+---------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+--------------------+----------+----------------+---------+
1 row in set (0.01 sec)

5、两次查询结果的对比和区别

从你提供的两次 SHOW TABLE STATUS 查询结果可以看出,batch_version 表的字符集和排序规则发生了变化。以下是两次查询结果的对比和区别:


第一次查询结果(修改前)

Collation: latin1_swedish_ci
  • 字符集: latin1
  • 排序规则: latin1_swedish_ci
  • 说明:
    • 表使用的是 latin1 字符集,支持单字节编码(适用于西欧语言)。
    • 排序规则是 swedish_ci,表示大小写不敏感(case-insensitive),基于瑞典语的排序规则。

第二次查询结果(修改后)

Collation: utf8mb4_general_ci
  • 字符集: utf8mb4
  • 排序规则: utf8mb4_general_ci
  • 说明:
    • 表使用的是 utf8mb4 字符集,支持多字节编码(适用于全球所有语言,包括中文、日文、韩文等)。
    • 排序规则是 general_ci,表示大小写不敏感(case-insensitive),基于 Unicode 的通用排序规则。

主要区别

  1. 字符集不同

    • latin1 仅支持单字节编码,适用于西欧语言。
    • utf8mb4 支持多字节编码,适用于全球所有语言。
  2. 排序规则不同

    • latin1_swedish_ci 是基于瑞典语的排序规则,仅适用于 latin1 字符集。
    • utf8mb4_general_ci 是基于 Unicode 的通用排序规则,适用于 utf8mb4 字符集。
  3. 兼容性

    • latin1 无法存储多字节字符(如中文、日文等),而 utf8mb4 可以。
    • 如果你的数据中包含非西欧字符(如中文),使用 latin1 会导致乱码或数据丢失,而 utf8mb4 可以完美支持。
  4. 存储空间

    • latin1 每个字符占用 1 个字节。
    • utf8mb4 每个字符可能占用 1 到 4 个字节(取决于字符)。
  5. 排序和比较行为

    • latin1_swedish_ciutf8mb4_general_ci 都是大小写不敏感的,但它们的排序规则基于不同的语言和字符集,因此在某些情况下排序结果可能不同。

为什么会有这种变化?

  • 可能是你或其他人执行了修改表字符集和排序规则的操作,例如:
    ALTER TABLE batch_version 
    CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
    
  • 这种修改通常是为了支持多语言字符(如中文)或统一字符集。

需要注意的事项

  1. 数据兼容性

    • 如果表中原本存储了 latin1 编码的数据,修改为 utf8mb4 后,可能需要确保数据正确转换,避免乱码。
  2. 索引和排序

    • 修改字符集和排序规则可能会影响索引和排序行为,建议在修改后测试相关功能。
  3. 应用程序兼容性

    • 确保应用程序能够正确处理 utf8mb4 字符集。

在这里插入图片描述

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;