900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > mysql 数据库字符集 表字符集 列字符集优先级 以及修改表字符集utf8为utf8mb4对

mysql 数据库字符集 表字符集 列字符集优先级 以及修改表字符集utf8为utf8mb4对

时间:2021-04-08 10:03:15

相关推荐

mysql 数据库字符集 表字符集  列字符集优先级 以及修改表字符集utf8为utf8mb4对

myslq 可以设置数据库级别,表级别,列级别 字符集编码;

优先级顺序为:数据库字符集 < 表字符集 < 列字符集;

也就是 上面三个级别 字符集不一致时,以 更小范围的配置为准;

例如:数据库字符集为utf8 表字符集不设置的情况下 会默认 utf8 ,如果表主动设置了编码 utf8mb4;那么表的字符集编码就为utf8MB4;

由于会有生僻字导致 入库报错后,数据入库失败;所以决定将大部分表数据由utf8 改为utf8mb4 ,开始想到了 两个疑问:

1、将一个表转换编码时,要是表中某个字段长度转后超过了255设置的最大长度,是表编码转换不成功,还是能成功数据会出现异常;2、编码转换后,字节长度变化了,可能导致原来能正常存储255字符的现在没法正常存储,防止部分字段原来可以存数据,现在存储长度变短,无法入库了;

后来通过测试得到了答案 - 不影响;

第一点。因 mysql5.0版本以上,varchar(255),指的是255字符; 最大65532字节; 所以 varchar(255) 这个限制即使改变 字符集,也没有超过最大字节数,所以不会受影响;

第二点:修改表字符集的时候,可以选择对 已存在的数据是否刷新(是否以新的字符集进行存储);或者只对 后来插入的数据生效(已存在的数据不做处理);

语句分别如下:

1修改表的字符集 并刷新之前已存在的数据; 可以看到 修改后已存在的三条记录受到了影响;(如果需要设置 校对规则后面增加COLLATE 校对规则即可)

ALTER tabletable_nameCONVERT to CHARACTER set新的字符集;

2 修改表的字符集,但不对之前已存在的数据刷新;可以看到 修改后 受影响的行为 0 ;(如果需要设置 校对规则后面增加COLLATE 校对规则即可)

ALTER tabletable_nameDEFAULT to CHARACTER set新的字符集;

mysql 数据库字符集 表字符集 列字符集优先级 以及修改表字符集utf8为utf8mb4对之前的数据是否有影响 简记

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。