文章目录
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)。- 这种排序规则会将大小写字母视为相同(例如
A
和a
是等价的)。
使用场景
- 如果你的数据主要是西欧语言(如英语、法语等),并且不需要支持多字节字符(如中文、日文等),
latin1_swedish_ci
是一个常见的选择。 - 它是 MySQL 的默认字符集和排序规则(在旧版本中)。
注意事项
-
不支持多字节字符:
latin1
不支持存储中文、日文、韩文等多字节字符。如果需要存储这些字符,建议使用utf8mb4
字符集。
-
排序规则的影响:
- 排序规则会影响字符串的比较和排序。例如,
swedish_ci
会将A
和a
视为相同,而bin
(二进制排序规则)则会区分大小写。
- 排序规则会影响字符串的比较和排序。例如,
-
迁移到 UTF-8:
- 如果你的应用需要支持多语言,建议将字符集迁移到
utf8mb4
,并使用utf8mb4_unicode_ci
或utf8mb4_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 的通用排序规则。
- 表使用的是
主要区别
-
字符集不同:
latin1
仅支持单字节编码,适用于西欧语言。utf8mb4
支持多字节编码,适用于全球所有语言。
-
排序规则不同:
latin1_swedish_ci
是基于瑞典语的排序规则,仅适用于latin1
字符集。utf8mb4_general_ci
是基于 Unicode 的通用排序规则,适用于utf8mb4
字符集。
-
兼容性:
latin1
无法存储多字节字符(如中文、日文等),而utf8mb4
可以。- 如果你的数据中包含非西欧字符(如中文),使用
latin1
会导致乱码或数据丢失,而utf8mb4
可以完美支持。
-
存储空间:
latin1
每个字符占用 1 个字节。utf8mb4
每个字符可能占用 1 到 4 个字节(取决于字符)。
-
排序和比较行为:
latin1_swedish_ci
和utf8mb4_general_ci
都是大小写不敏感的,但它们的排序规则基于不同的语言和字符集,因此在某些情况下排序结果可能不同。
为什么会有这种变化?
- 可能是你或其他人执行了修改表字符集和排序规则的操作,例如:
ALTER TABLE batch_version CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
- 这种修改通常是为了支持多语言字符(如中文)或统一字符集。
需要注意的事项
-
数据兼容性:
- 如果表中原本存储了
latin1
编码的数据,修改为utf8mb4
后,可能需要确保数据正确转换,避免乱码。
- 如果表中原本存储了
-
索引和排序:
- 修改字符集和排序规则可能会影响索引和排序行为,建议在修改后测试相关功能。
-
应用程序兼容性:
- 确保应用程序能够正确处理
utf8mb4
字符集。
- 确保应用程序能够正确处理