gpt4 book ai didi

MySQL:转换数据类型和排序规则对存储数据的影响

转载 作者:行者123 更新时间:2023-11-29 04:24:50 25 4
gpt4 key购买 nike

我有一个关于此的一般性问题。很多时候我们想要更改字段或排序规则的数据类型当之前插入大量数据时。考虑这些情况:

  1. varchar 排序规则从 utf8_general_ci 转换为 latin1_swedish_ci:据我所知,第一个是多字节字符,第二个是单字节字符。此转换是否正确操作存储的记录?这种转换是否会导致现有数据量减少(可能减少 50%)?

  2. int(10)smallint(5) 的转换:数据量是否正确减少到 50%?

  3. 或者例如:int(10)unsigned int(10) - textvarchar(1000 ) - varchar(20)char(10) , ...

很明显,可以采取这些措施来提高效率、减少数据量和......

假设我有一个包含 1,000,000 条记录的表。我想知道执行此类操作是否会对存储的数据产生不良影响,或者它是否会降低以后涉及此表的插入和选择的性能。

更新:
我说把utf8编码charset改成拉丁文,当然我这个字段的值是英文的(很明显如果有日文就会丢失)。有了这个假设,我会询问生成的表大小和性能。

最佳答案

  1. Converting varchar collation from utf8_general_ci to latin1_swedish_ci: As I know the first has multibyte chars and the second singly byte ones. Does this conversion manipulate stored records correctly? And does this conversion lead to reduction of volume of existing data (maybe 50%)?

    Collat​​ion 仅仅是用于字符串比较的排序——它(几乎)与用于数据存储的字符编码无关。我说几乎是因为排序规则只能用于某些字符集,所以更改排序规则可能会强制更改字符编码。

    在一定程度上修改了字符编码,MySQL 将正确地将值重新编码为新字符集,无论是从单字节到多字节还是反之。请注意,对于列来说太大的任何值都将被截断。

    假设新的字符类型是可变长度的,并且在新编码中使用比以前更少的字节对值进行编码,那么表的大小当然会减少。

  2. Conversion of int(10) to smallint(5): Does the volume of data reduce to 50% correctly?

    INTSMALLINT 分别占用 4 和 2 个字节,无论显示宽度如何:所以是的,表格的大小将相应减少。

  3. Or for example: int(10) to unsigned int(10) - text to varchar(1000) - varchar(20) to char(10), ...

    • INT无论是否有符号都占4个字节,所以不会有变化;

    • TEXTVARCHAR(1000) 都占用 L+2 个字节(其中 L 是值的长度(以字节为单位),因此不会有任何变化;

    • VARCHAR(20) 占用 L+1 个字节(其中 L 是值的字节长度)而 CHAR(10)占用10×w个字节(其中w是字符集中最大长度字符所需的字节数),所以有很可能是一个变化,但它取决于存储的实际值和使用的字符编码。

请注意,根据存储引擎的不同,表大小的减少可能不会立即释放到文件系统。

关于MySQL:转换数据类型和排序规则对存储数据的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13950021/

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