首页
学习
活动
专区
圈层
工具
发布

字符集没统一,DBA的头发就是这么掉光的

你可能遇到过这些场景:从老库导数据到新库,中文变成了"锟斤拷";两个表做JOIN,字段内容一样却关联不上;用户存了个emoji表情,数据库直接报错。...比如UTF8字符集在MySQL里有utf8(实际是utf8mb3,最多3字节)和utf8mb4(最多4字节)两种编码,后者才能存emoji。...在MySQL里是早期的默认字符集。如果你的库里还有Latin1的表,存中文就会变成一堆问号——因为它压根不认识中文字。GBK/GB2312中文字符集。...emoji表情、一些生僻汉字、部分特殊符号都需要4字节才能存。2018年之后,所有新项目都应该直接用utf8mb4,没有例外。五大经典踩坑场景场景一:数据迁移变"锟斤拷"这是最经典的乱码场景。...客户端按自己的字符集发送数据,数据库按连接字符集做转换,如果连接字符集设错了,数据在入库前就已经被错误转换。

14810
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    关于charvarchar(n)中n的探究:字符数or字节数

    探索过程 回到那个问题,这100的长度到底能存多少个中文,既然一个中文占3个字节,是不是就只能存100/3=33个中文呢?换句话说,100这个数字是字节数,还是字符数?...这就说明,varchar(4)和char(4)中的4是字节数,即100是字节数,只能存33个中文字符。...select之后发现,这四个中文竟然都存进去了,这也就说明我们刚才定义的那个char(4)和varchar(4)中的4是字符数,而非字节数,这么说来,那100就是可以存100个中文字符了,这不完全将刚才的那个结论颠覆了...n个字符,就是因为此处的编码都是utf8的,utf8屏蔽了中文和英文和数字的显示区别,他们都是一个字符,所以定义的时候那个n就代表了字符的个数,具体占多少个字节是根据他们自身字符串的长度定的,比如char...(100)存储100个中文,那么占300个字节,存100个字母,就占100个字节。

    3.1K70

    快看,我们的分布式缓存就是这样把注册中心搞崩塌的

    没道理啊,无论应用侧还是缓存侧,近一个月以来都没有发布过版本,而且分布式缓存除了在ZK中存一些节点相关信息之外,基本对ZK无依赖。 10点50分,ZK集群全部重启,10分钟后,再次瘫痪。...一堆的问好,充斥着每个人的大脑。...根据本地缓存的工作机制,我们一般会在里面存些什么呢? 更新频率较低,但访问却很频繁,比如系统参数或业务参数。 单个Key/Value较大,网络消耗比较大,性能下降明显。...作为技术管理者,具备良好的心态,把每次故障都看成是一次蝉变的过程,从中得到总结与经验,并加以传承,今后不再就犯,那就是好样的。 不过,万一哪天失手,给系统来了个彻底瘫痪,该怎么办呢?...从本月起,我将在我的知识星球中对此话题内容逐一进行详细的案例解读、分析,在实战中磨炼,苦练七十二变,笑对八十一难。

    54010

    【爬虫】(七)Python数据存储之MySQL(下)

    上一篇关于Python和MySQL的简单联调做了学习。 这次主要是将这个过程再优化扩大点。 对教务处需要的数据都进行了处理存进数据库了。 也是对bug问题的总结。...之前是Holi的后台一直想要我们把数据存成CSV格式的他再读取存进数据库。 可是这件事情在Python这边就可以完成啊。 后面就还是用着这样的想法去做: 从CSV文件里读取存进MySQL。...最直接的方法应该是:一步到位直接存进MySQL。 但是我还是认为,先把这个功能实现了才是最重要的。 其他的后面可以慢慢改。...图形化MySQL 有同学给我推荐了两款Navicat和SQLyog。 有另外一个队友也在用SQLyog,我就选它了。 确实是比命令行好用多了。 也不容易出问题。...bug总结 KeyError: 这是在把CSV文件存进MySQL里出现的错误。 研究了好久把col列写对着啊,字典怎么会出错。 事实证明人变懒就会出错。

    89810

    MySQL之表的数据类型

    -1 有符号和无符号的最大数字需要的显示宽度均为10,而针对有符号的最小值则需要11位才能显示完全,所以int类型默认的显示宽度为11是非常合理的 最后:整形类型,其实没有必要指定显示宽度,使用默认的就ok...:定长,简单粗暴,浪费空间,存取速度快 字符长度范围:0-255(一个中文是一个字符,是utf8编码的3个字节) 存储: 存储char类型的值时,会往右填充空格来满足长度...技术内幕 HEX(a): 4D7953514CBCBCCAF5C4DAC4BB LENGTH (a): 13 CHAR_LENGTH(a): 9 1 row in set (0.00 sec) 变...,就显示多少 mysql> select x,char_length(x),y,char_length(y) from t1; +-----------+----------------+------...+2个空格=11Bytes #varchar类型:3个中文字符+1个空格=10Bytes mysql> select x,length(x),y,length(y) from t1; +--------

    6.3K80

    SQL学习笔记三(补充-2)之MySQL数据类型

    -1 有符号和无符号的最大数字需要的显示宽度均为10,而针对有符号的最小值则需要11位才能显示完全,所以int类型默认的显示宽度为11是非常合理的 最后:整形类型,其实没有必要指定显示宽度,使用默认的就ok...:定长,简单粗暴,浪费空间,存取速度快 字符长度范围:0-255(一个中文是一个字符,是utf8编码的3个字节) 存储: 存储char类型的值时,会往右填充空格来满足长度...技术内幕 HEX(a): 4D7953514CBCBCCAF5C4DAC4BB LENGTH (a): 13 CHAR_LENGTH(a): 9 1 row in set (0.00 sec) 变...,就显示多少 mysql> select x,char_length(x),y,char_length(y) from t1; +-----------+----------------+------...+2个空格=11Bytes #varchar类型:3个中文字符+1个空格=10Bytes mysql> select x,length(x),y,length(y) from t1; +--------

    2.2K40

    Elasticsearch 入门教程:核心原理、Docker 部署与中文搜索实战

    它存数据,但真正擅长的是对海量文本做近实时的全文检索——你可以把它理解为"给数据库装上了百度搜索"。...分词器决定了文本怎么拆、怎么存、怎么搜——它是在字符写入索引之前必须要经过的"安检通道"。...看到->Installedanalysis-ik就装好了。我踩过的坑:插件安装在容器内部,容器一删就没了。...你可以理解为"给MySQL接了一个监听器,数据一变它就通知你"。Canal最大的卖点是零侵入——业务代码一行不用改,直接订阅数据库日志就行。一致性也天然优于MQ方案,因为数据来源就是binlog。...我的建议很简单:如果你只有一个MySQL数据源,同步逻辑就是"MySQL多了/改了什么,ES就跟着改",直接上Canal,省心。

    74700

    .NET简谈事件与委托

    牛肉,10)){这家有牛肉;}//我调用老板的吃饭方法,确定是否有我要的菜; 这样的话,不管谁来吃饭你都要提供一种方法,来供外部调用;每个人都吃饭习惯,点菜习惯不同对数量的理解更是不能很透彻的明白,这样就产生了一个问题...,互动性很差,没有沟通,没有回应;如果有了事件,显然就变的更人性化一点,对外不需要考虑太多,本店的特色定义成过程事件,特色的步骤必须是这样的,将本饭店的特色定义成一个个的过程事件,顾客来了按照这样的一个事件流程执行...老板的事件参数也没有接收到任何客户输入的信息;下面我就以吃饭为例子讲解对象的事件; public class 老板 { public delegate void 看见有顾客来了(string 问好...class 顾客 { 老板 laoban=new 老板(); laoban.顾客来吃饭+=new 看见有顾客来了(处理老板事件); public void 处理老板事件(string 问好...; } laoban.On顾客来吃饭("您好请问吃些什么");//这个方法也许在某个事件触发后调用的,一般不在订阅对象中触发; } 我简单的实现订阅老板的事件,然后老板问好吃什么,我回馈有牛肉吗

    47710

    CMS-CMS框架解析

    其实本人也写过微框架,本次就借助CMS来谈谈框架的思想。...PHP_SELF:即端口后的,问号之前的路径,要和SCRIPT_NAME相互区分 REQUEST_URI:全路径,即端口后面的所有路径,包含问号后的参数 PATH_INFO :即问好之前端口之后...处理的方式是将语言的标识写在REUQEST_URI中,然后再语言目录中匹配 如果是中文就取中文zh下面的配置,该配置控制某些按钮或者文档的显示,如果是英文获取英文的配置,配置如下 ,如果匹配到了,然后将语言标识从...a=1&b=3,最后的index.html中的.html是伪静态标识在纯路径的最后,是可以配置的,其实本质是indexController的index方法,在解析路由的时候用了增加一个后缀的小技巧,就生成了伪静态...由于这里内容很多,这里就讲excute方法,里面就是判断了下控制器存不存在,方法存不存在,如果存在就调用该控制器的该方法,如果开启了缓存,则将该方法生成的页面转换为缓存页面。

    6.7K10

    Hadoop 学习总结(3)-Hive SQL 基础

    把 SQL 翻译成 MapReduce 程序的工具,适合海量数据的离线分析Hive vs MySQL: MySQL 在线事务(毫秒级),Hive 离线分析(秒~分钟级)内部表 vs 外部表: 内部表删表删数据...外部表删表只删结构数据还在分区表: 按字段分目录存储,查询只扫需要的分区环境操作Hive 版本:2.3.2通过 docker exec -it hiveserver2 进入容器通过 Beeline 连接 HiveServer2中文乱码解决...Hive INSERT 原理INSERT INTO VALUES → 解析 SQL → 启动 MapReduce → 写 HDFSLOAD DATA → 本质是 hdfs dfs -put 直接复制文件数据存...; -- ↑ 不用逗号,用 | DWD 明细层SPLIT 拆字符串 + CAST 转类型数据变干净...092,方便按字符串排序CONCAT('092', '数学') → 092数学MAX(...) → 取最高分的那个字符串SUBSTR(..., 4) → 去掉前3位数字,拿到科目名总结整条链路: ODS 存原始

    23420

    mybatis连接mysql数据库插入中文乱码

    对于mysql数据库的乱码问题,有两中情况: 1. mysql数据库编码问题(建库时设定)。 2. 连接mysql数据库的url编码设置问题。...我试过修改现有数据库字符集为UFT -8,但是根本不起作用,插入的中文仍然乱码(中文显示成:???)。重建库时选择字符集为UTF-8之后,中文正常显示了。...对于第二个问题,是这样的情况:我建库时设置了数据库默认字符集为UTF-8,通过mysql workbench直接插入中文显示完全正常。但是使用mybaits插入数据时,中文显示成了”???”...但从数据库获取的中文不会乱码。跟踪数据库操作,SQL语句中的中文还是显示正常的,但是插入到mysql数据库后就乱码了,于是判断可能是数据库连接的问题。...存数据时: 数据库在存放项目数据的时候会先用UTF-8格式将数据解码成字节码,然后再将解码后的字节码重新使用GBK编码存放到数据库中。

    8.7K20

    MySQL优化摆烂指南:从“卡到想砸键盘”到“飞一般丝滑”,6招搞定!

    MySQL优化真不用啃大部头,记住这6个“摆烂破局法”,让数据库从“磨洋工”变“卷王”。 1....记住3个“偷懒原则”: ①别查没用的字段:要查用户昵称就写 SELECT nickname FROM user ,别动不动就 SELECT * ——你要一个苹果,没必要把整个水果摊都搬回来。...③按字段拆:用户表拆成“基础信息表”(存ID、昵称,常用)和“详细信息表”(存地址、生日,少用)——常用的表小,查起来飞,不常用的表放一边,互不耽误。 5....-s c -t 10 日志路径 ),哪个慢就改哪个,别等它“积劳成疾”。...②清理“过期垃圾”:3年前的日志、没用的测试数据,该删就删;表用久了会“碎片化”(比如频繁删改后,数据存得乱七八糟),用 OPTIMIZE TABLE 整理下,让MySQL“住得整齐”。

    20101

    lua + OpenResty + Canal 场景应用开发

    定义Lua 定义一个 Lua脚本,用户第一请求时,读数据库的资源… 存Redis,Nginx:… Sreader.lua --中文转码 ngx.header.content_type="application...方便操作) Mysql模板,超时,连接数据,连接,拼sql,执行,转JSON,存Redis Nginx,输出,关闭!...Supdate.lua --中文转码,根据模块获取对象; ngx.header.content_type="application/json;charset=utf8" local cjson = require...} 测试: 启动OpenResty 启动Redis Mysql 此时Redis 就已将和Mysql数据库中同步了数据了… Canal 什么是canal canal是阿里巴巴旗下的一款开源项目,...基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL (也支持mariaDB和mysql大致相同的数据库,为了防止Mysql被Oracle收购变的 收费了!)。

    61410

    MySQL建表时需要注意什么

    MySQL建表时需要注意什么命名规范✅(大厂红线,基础但必问)统一团队规范,避免后续维护灾难,核心原则:全小写+下划线分隔,禁止驼峰和中文表名前缀统一(如t_),避免与MySQL关键字冲突见名知意,禁止无意义缩写...tinyint(1)节省3字节/行,百万行省3MBchar(20)存手机号varchar(20)变长存储,大幅节省空间timestamp存时间datetime(6)timestamp有2038年溢出+时区问题...varchar(255)存所有字符串按需设置长度过长会导致行溢出,影响性能NULL存默认值0/''/特殊值NULL会导致索引失效、统计错误额外要点:大字段(text/blob)单独拆表,避免行溢出和查询性能下降枚举类型慎用...字符集必须是utf8mb4+utf8mb4_general_ci,能存表情包,千万别用那个假三字节的utf8。这些通常在建库时就锁死,防止建表遗漏。”面试官:“好,再深入一点。...如果表里需要存大文本,比如文章内容,或者用户扩展属性经常变,你怎么设计?”应聘者:“大字段拆表。

    14810

    有了MinIO,你还会用FastDFS么?

    使用go写的应用,干干净净就一个运行程序,看着就清爽。就像SpringBoot打成一个jar包那样清爽。 安装多简单?请看官方gif。 ?...minio有中文文档,见:https://docs.min.io/cn/ 。内容很全,从安装到原理,一应俱全。 接下来我们稍微看一下最关心的高可用。...这个也难怪,对象存储都是存的比较大的数据,写入耗时比协调耗时要长的多,这就没必要使用类似Raft或者Paxos一样的复杂协调机制。 这是启动之后的访问界面,可以看到非常清爽的界面。...SDK方面,提供了Java、JavaScript、Python、Golang、.Net等各种语言的sdk,集成变的更加容易。 其他的就不啰嗦了,中文文档的内容很全。...就像是MySQL被Oracle收购之后,又出来了Mariadb。你可能觉得公司亏了,但大公司根本不缺这点钱,收购并不一定是想要建设,他们只是想要消灭前进路上的一些威胁而已。

    4.5K30

    【redis】string类型相关操作:SET、GET、MSET、MGET、SETNX、SETEX、PSETEX

    JSON、XML、二进制数据(图片、视频、音频…) 音频、视频体积可能会比较大,Redis 对于 string 来说,限制了大小最大为 512M Redis 是单线程模型,希望进行的操作都是比较快速的,如果存的数据都很大...,读取时间就要很长,就可能会导致 Redis 被阻塞 所以一般不会存储大文件 编码转换 Redis 不会做任何的编码转换,存的是什么,取出来就还是什么。...MySQL 的默认字符集如果是拉丁文,那么当你插入中文的时候,就会失败。...当你插入一个数据的时候,MySQL 就会把你插入的数据拿到字符集里面去找,看看是不是合法的数据,有问题就插入不了 Redis 就没有 MySQL 这么详细的验证步骤,你存的是什么,取出来的就还是什么。...你按 utf-8 存,取出来还是 utf-8,按照 gbk 存,取出来就还是 gbk 所以 Redis 一般就不会遇到乱码问题(存取用的编码方式不一致) SET 和 GET SET 将 string

    63110

    10+年数据库开发工程师带你深入理解MySQL索引

    我们都是知道数据库的数据都是存储在磁盘上的,当我们程序启动起来的时候,就相当于一个进程运行在了机器的内存当中。...而数据库加索引的主要目的就是为了使用一种合适的数据结构,MySQL学习笔记+面试真题+MySQL索引优化视频,可以使得查询数据的效率变高,减少磁盘io的次数,提升数据查找的速率,而不再是愣头青式的全局遍历...那我们是不是把高度变矮就可以了呢? 所以我们再考虑下B树。首先简单介绍下B树的数据结构: B树的定义: 每个节点最多有m-1个关键字(可以存有的键值对)。 根节点最少可以只有1个关键字。...现在再看B+树叶子节点的指针,我们就明白了它的用处,预读的时候可以保证连续读取的数据有序。 可能还有的同学提过B*树,它是在B+树基础上,为非叶子结点也增加链表指针。...MySQL学习笔记+面试真题+MySQL索引优化视频 聚簇索引和非聚簇索引: 上面我们提到B+树的叶子节点存了索引key的数据data,但是mysql不同的引擎存data的选择是不一样的,MyISAM是将索引文件和真实的数据文件分两个文件各种存放

    49430
    领券