美文网首页
认识MySQL中的数据对象和字符集

认识MySQL中的数据对象和字符集

作者: 古飞_数据 | 来源:发表于2023-09-16 08:54 被阅读0次

1.MySQL数据库中的对象
2.为什么说MySQL不建议生产环境使用存储过程,如果必须要用,要考虑什么?
3.理解MySQL字符集使用
4.数据库升级、迁移乱码怎么处理

1.MySQL数据库中的对象

image.png

2.为什么说MySQL不建议生产环境使用存储过程,如果必须要用,要考虑什么?

缺点
       MySQL没有执行计划缓存
       MySQL每次SQL,存储过程都需要解析一下,导致CPU,成为瓶颈
       MySQL每个SQL只能使用一个CPU,也可以说是一个连接只能使用一个CPU (Server层,目前InnoDB层可以使用到多核),导致CPU成为瓶颈

前端很容易扩容,MySQL扩容成本比较高
好处
      可以适当的封装业务逻辑
      减少前端和数据库交互次数

3.理解MySQL字符集使用

字符集是一套符号和编码的规则,字符串都必须有相应的字符集
校验集是这套符号和编码的校验规则,定义字符排序规则,字符串之间比较的规则
ASCII字符在不同字符集中,其所需的字节数是不一样的
非ASCII字符在不同字符集中,其所需的字节数是不一样的
多字节字符间是以字符进行比较,而非以字节为单位进行比较
校验集可以用于验证大小写、不同重音等是否一致
个别校验集是二进制的,基于字符对应的数值进行比较
  XXX_bin将字符串中的每一个字符用二进制数据存储,区分大小写。
  XXX_general_ci不区分大小写,ci为case insensitive的缩写,即大小写不敏感。
  XXX_general_cs区分大小写,cs为case sensitive的缩写,即大小写敏感

拉丁 128
gbk 2byte
utf8 3byte
utf8mb4 4byte

XXX_bin 排序不准确
XXX_general_cs 做国际内容推荐
针对 order by group by

1.show Variables like '%table_names' 查看lower_case_table_names的值,0代表区分,1代表不区分。
2.mysql对于类型为varchar数据默认不区分大小写,但如果该字段以“*_bin”编码的话会使mysql对其区分大小写。
3.mysql对于字段名的策略与var[char类型]数据相同。即:默认不区分大小写,但如果该字段是以“*_bin”编码的话会使mysql对其区分大小写。
4、mysql对于表名的策略与varchar类型数据相同。即:默认不区分大小写,但如果该表是以“*_bin”编码的话会使mysql对其区分大小写。

不同字符集编码

echo "知"|iconv -t gbk |hexdump
echo "知"|iconv |hexdump

echo "a" |iconv -t gbk | hexdump
echo "a" |iconv -t utf8 | hexdump
echo "知" | iconv -t UTF-16 | hexdump

locale
echo "知" | hexdump
file zst.txt         查看文件的字符编码
rpm -qf /usr/bin/file    --查软件包
cat zst.txt | hexdump

转码
cat zst.txt |iconv -t gbk | hexdump    utf8->gbk

select hexdump(c1) from tb;

0a \n   回车符
utf8-16
GBK: 2个字节
UTF8:3个字节
ASCII码:1字节(7bit)
latin1 :1字节
字节编码转换:全部通过unicode转换


VARCHAR(30)在UTF-8字符集下,最多可以写入几个英文(ASCII码)?
30
VARCHAR(30)在UTF-8字符集下,最大长度?最多可以写入几个中文字符?
30*3+1              30
VARCHAR(30),UTF-8字符集,最大长度?存储了?个汉字,字节数应该是:?
VARCHAR(30),UTF-8字符集,存储了30个英文,字节数应该是:?
VARCHAR(30),GBK字符集,存储了30个汉字,字节数应该是:?
30*2+1
VARCHAR(30),GBK字符集,存储了30个英文,字节数应该是:?
30*1+1
VARCHAR(30),LATIN1字符集,存储了15个汉字,字节数应该是:?

VARCHAR(30),LATIN1字符集,存储了30个英文,字节数应该是:?
show global variables like 'length%';   group_concat_max_len
show global variables like '%len';  ft_max_word_len
排序 group by  按分配大小

locale
locale -a | grep utf8
export LANG='en_US.UTF-8'

客户端需要为utf8
\s          set names utf8
字符集支持多层面:
服务器层(server)
数据库层(database)
数据表(table)
字段(column)
连接(connection)
结果集(result)


服务端:server -> database => table => column
客户端:connection => result
动态修改客户端字符集:SET NAMES latin 1/gb2312/utf8;
无法动态修改服务端字符集
cat my3306.cnf | grep char
character_set_server = utf8
file u1.sql
iconv -f utf8 -t gbk u1.sql
iconv -f utf8 -t gbk u1.sql | hexdump
iconf -f utf8 -t gbk u1.sql > u2.sql
file u2.sql
file u1.sql
cat u1.sql
cat u2.sql

重点
理解不同工具都有字符集,在经过的交互中,建议配置成字符集是一致的。
推荐使用:UTF8,如果是公司内部编辑控制的内容:推荐GBK
不同字符集编码转换推荐:iconv, file,hexdump

500G 数据库需要转码
转码:GBK->UTF8
迁移

mysqldump
--where="1=1 limit 1000";

show create database db;
create table xx character_set=utf8;

dts 摩拜开源 Gravity canal

相关文章

  • Mysql全备、增量备份及恢复

    Mysql字符集 MySQL数据库字符集包括字符集(CHARACTER)和校对规则(COLLATION)两个概念,...

  • MySQL常见问题汇集

    字符集mysql 字符集(CHARACTER SET)和校对集(COLLATE)mysql 中 character...

  • 八、MySQL字符集

    字符集和排序规则简介   MySQL提供了多种字符集和排序规则选择,其中字符集设置和数据存储以及客户端与MySQL...

  • 字符集与校对规则

    MySQL字符集及校对规则的理解 阅读目录:MySQL的字符集和校对规则 MySQL的字符集 MySQL与字符集 ...

  • mysql常用命令

    查看MySQL数据库服务器和数据库MySQL字符集。 查看MYSQL数据库中所有用户 查看数据库中具体某个用户的权...

  • 2020-04-05

    mysql 5.7 字符集导致中文乱码问题 使用mysql建库脚本创建数据库,建好后,数据库的字符集为latin...

  • MySql 全球化和本地化

    数据库表被用来存储和检索数据。不同的语言和字符集需要以不同的方式存储和检索。因此,MySQL需要适应不同的字符集(...

  • MySQL乱码问题

    MySQL字符集参数 MySQL参数使用 影响到字符编码的设置 数据库级别的字符集信息使用db.opt来存放字符集...

  • MYSQL数据库常用基本设置

    问题1:MYSQL数据库字符集设置 当MYSQL插入数据时,出现下面的错误,基本判断是字段的字符集不支持,常用解决...

  • mysql常用命令

    查看MySQL数据库服务器和数据库MySQL字符集。 show variables like '%char%'; ...

网友评论

      本文标题:认识MySQL中的数据对象和字符集

      本文链接:https://www.haomeiwen.com/subject/yttxzrtx.html