tinyint占几个字节_随笔几个小问题
前言:
先安利一个综艺:B站出的说唱新世代,好听好玩,比中国新说唱要real~
随笔几个最近遇到的小问题,简单记录一下,分享给大家:
1.MySQL支持存储emoji表情
2.MySQL中替换一个(字段)里所有的空格、tab键、换行、回车
3.sqooq1同步mysql tinyint类型数据到hive的转换
4.Impala中的刷新元数据和刷新表
5.hive删除表,清空表中数据小总结
6.Java中execute、executeUpdate、executeQuery三者的区别(及返回值)
7.Hutool Java工具集
1.MySQL支持存储emoji表情
背景:爬虫那边存在Hive中的是带有emoji表情的信息,但是发现回流到mysql的过程中出现了问题,原因是什么呢:
emoji表情是1个字符占4个字节,而utf8编码只支持1-3个字节的字符,所以utf8编码下,如果直接存储表情,数据库存储会失败。
原因定位是编码问题,但具体是Mysql服务端还是客户端层面的问题呢?
1.如果是Mysql服务端的问题
我们需要将Mysql编码设置为utf8mb4。(mysql在5.3+后加入了utf8mb4支持,完全兼容utf8),具体操作如下:
修改my.cnf配置文件:[client]# 客户端来源数据的默认字符集default-character-set = utf8mb4[mysqld]# 服务端默认字符集character-set-server=utf8mb4# 连接层默认字符集collation-server=utf8mb4_unicode_ci[mysql]# 数据库默认字符集default-character-set = utf8mb4注:修改完毕后,需要重新启动mysql服务才能生效。
2.如果是客户端的问题
即你在类似navicat手动执行插入操作的时候是没有问题的,但在应用端的操作是不行的,那可能需要排查一下你的JDBC连接了:
//可以在代码中指定连接的字符集为 utf8mb4String sqlCharset = "set names utf8mb4"Statement statment = conn.createStatement();resultSet = statment.executeQuery(sqlCharset);注:set names utf8mb4; 命令会将 character_set_client、character_set_connection、character_set_results 3个会话字符集相关变量均设置为utf8mb4,以保证写入或者读出的数据使用utf8mb4字符集进行解释。
JDBC的连接串中,不配置characterEncoding选项。连接器会自动匹配识别字符集,意思就是把characterEncoding=UTF-8去掉。例如:jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai&useUnicode=true 即可
当然,如果这还不行的话,估计就是你的JDBC连接驱动版本太低了。
2.MySQL中替换一个(字段)里所有的空格、tab键、换行、回车
SQL如下:
//demo 更新member_name字段UPDATE test.test SET member_name=REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(member_name,CHAR(9),''),CHAR(10),''),CHAR(13),''),' ' ,''),'\r\n','') WHERE create_date=CURDATE();备注: ‘ ’ 空格 char(9) tab键(水平制表符) char(10) 换行(跳到下一个新行) char(13) 回车(将打印光标移动到最左边) ‘\r\n’ 换行回车(将光标移动到下一行的最左边)
补充:
update多个字段的时候,应该用" , "分隔,而不是AND,AND连接的时候,Mysql实际是执行的逻辑与运算,会出现你的某个字段值全都变为0或1,这个注意一下⚠️。
3.sqooq1同步mysql tinyint类型数据到hive的转换
背景:在利用sqoop1将mysql导入到Hive的过程中,mysql中部分tinyint格式字段的值导入到Hive的时候变成了空值。
度娘的时候,才发现原来这个问题在官网(http://sqoop.apache.org/docs/1.4.7/SqoopUserGuide.html#_mysql_import_of_tinyint_1_from_mysql_behaves_strangely)也有所记录:
官方文档里给出了解决方法,有两个解决方法:亲测有效!在jdbc链接后面加上:tinyInt1isBit=false. 例: --connecttion jdbc:mysql://localhost/test?tinyInt1isBit=false显式覆盖数据类型TINYINT(1)列的列映射. 例: 如果列名为foo,则在导入期间将以下选项传递给Sqoop:– map-column-hive foo = tinyint。在非Hive导入HDFS的情况下,使用–map-column-java foo = integer
4.Impala中的刷新元数据和刷新表
上才艺:
invalidate metadata是用于刷新全库或者某个表的元数据,包括表的元数据和表内的文件数据,它会首先清除表的缓存,然后从metastore中重新加载全部数据并缓存,该操作代价比较重,主要用于在hive中修改了表的元数据,需要同步到impala,例如create table/drop table/alter table add columns等。语法:invalidate metadata //重新加载所有库中的所有表invalidate metadata [table] //重新加载指定的某个表
refresh是用于刷新某个表或者某个分区的数据信息,它会重用之前的表元数据,仅仅执行文件刷新操作,它能够检测到表中分区的增加和减少,主要用于表中元数据未修改,数据的修改,例如insert into、load data、alter table add partition、llter table drop partition等,如果直接修改表的hdfs文件(增加、删除或者重命名)也需要指定refresh刷新数据信息。语法:refresh [table] //刷新某个表refresh [table] partition [partition] //刷新某个表的某个分区
5.hive删除表,清空表中数据小总结
上才艺:
删除内部表中的数据,保留表的结构 truncate table 表名hive按分区删除数据 alter table table_name drop partition (parttition_name='分区')删除表 drop table table_name清空表 insert overwrite table_name ......;
6.Java中execute、executeUpdate、executeQuery三者的区别(及返回值)
上才艺:
executeQuery(String sql); 执行SQL查询,并返回ResultSet对象。executeUpdate(String sql); 可执行增,删,改,返回执行受到影响的行数。execute(String sql); 可执行任何SQL语句,返回一个布尔值,表示是否返回ResultSet 。
7.Hutool Java工具集
推荐一款国产强大的Java开源工具集,开箱即用,轻量简洁;18年刚进公司那会,师兄就推荐给我,最近也是刚在项目中用上,在这里推荐给大家。详细内容直接上官网看吧:https://hutool.cn/docs/#/
总结:
没有一颗心,会因为追求梦想而受伤。当你真心渴望某样东西时,整个宇宙都会来帮忙。--保罗·戈埃罗 《牧羊少年奇幻之旅》
喜欢的朋友,记得点赞?关注➕
tinyint占几个字节_随笔几个小问题相关推荐
- float占几个字节_一个HashMap对象占多少字节?
对象=对象头+成员变量+对齐填充 对象头结构:java对象在Heap里面的结构是这样的:对象头跟对象体,对象体跟C里面的结构体是一样的,对象头由两个域组成:用于存放hashcode.同步.GC的_ma ...
- java中double类型占几个字节_面试官:Java 中有几种基本数据类型是什么?各自占用多少字节?...
认识基本数据类型 在学习基本数据类型之前,我们先认识一下这两个单词:1.bit --位:位是计算机中存储数据的最小单位,指二进制数中的一个位数,其值为"0"或"1&quo ...
- 64位 int 占几个字节_面试常考,项目易错,长文详解C/C++中的字节对齐
面试常考,项目易错,长文详解C/C++中的字节对齐mp.weixin.qq.com 引入主题,看代码 我们先来看看以下程序 //编译器:https://tool.lu/coderunner/ //来 ...
- 一个中文字符占几个字节_字节与字符的关系
简介 字节(Byte)是计量单位,表示数据量多少,二进制数据,是计算机信息技术用于计量存储容量的一种计量单位,通常情况下一字节等于八位.通常在读取图片.声音.可执行文件需要用字节数组来保存文件,在下载 ...
- mysql utf8占几个字节_数据库表字段缓存_一个汉字在数据库占几个字节?
1.oracle10g数据库表字段为varchar(n)类型,存英文很简单,只要字母个数不大于n即可. 但是对于汉字,按照同样的方法就不行了.因为对于汉字不同的字符集, 在数据库占用的字节是不一样的. ...
- python int占几个字节_小白学python第1问: int 占几个字节?
windows 64位机器,python3.7:后面的文章中,没有特别说明的话,都是在该环境下运行 int 占几个字节? C语言中(GCC编译器),int 占据4个字节,python呢? 我们用pyt ...
- python中utf8占几个字节_为什么utf8占用3个字节
UNICODE是万能编码,包含了所有符号的编码,它规定了所有符号在计算机底层的二进制的表示顺序.有关Unicode为什么会出现就不叙述了,Unicode是针对所有计算机的使用者定义一套统一的编码规范, ...
- python一个字符占几个字节_关于python:这个字节字符串实际占用了多少内存?
我的理解是os.urandom(size)输出一个给定"size"的随机字节串,但是: import os import sys print(sys.getsizeof(os.ur ...
- python一个中文占几个字节_中文在python中占几个字节
如果是utf-8编码,那么一个中文字符占用三个字节,一个英文字符占用一个字节.如果是gbk编码,那么一个中文字符占用两个字节,一个英文字符占用一个字节. 如果是utf-8编码,那么一个中文包含繁体字等 ...
最新文章
- van Emda Boas
- 【Socket网络编程】17. recv() 函数详解
- 2.3.5 用信号量实现 进程互斥 同步 前驱关系
- opencv 报错:Error: Assertion failed (data) in cv::Mat::at, file ... mat.inl.hpp, line 897(访问了不存在矩阵的像素)
- postman发送object_.NetCore HttpClient发送请求的时候为什么自动带上了一个RequestId头部...
- 前端学习(1504):组件通信的几种情况
- 2个js实现图片轮播效果(用)
- Oracle学习 第26天 Toad试用感受
- IdTCP的C++Builder2010示例(转)
- 能打开java文件的软件有哪些_使用JAVA打开本地应用程序相关的文件
- python中排序从小到大_Python实现对特定列表进行从小到大排序操作示例
- Java基础知识强化之网络编程笔记22:Android网络通信之 Android常用OAuth登录(获取个人信息)...
- 手机计算机不支持此操作系统,Win10计算机投影屏幕此设备不支持Miracast
- SQL Server迁移数据库文件(ldfmdf文件)到其他盘
- 计算机系统配置有哪些,电脑的配置基本知识 电脑有哪些基本配置
- 数据标注员需要专业系统的学习么?
- 【MVC 4】4.MVC 基本工具(Visual Studio 的单元测试、使用Moq)
- 带你揭秘华为5G为何地表最强
- linux开启rdp服务,让windows电脑mstsc远程,linux rdesktop远程windows机器
- 二级路由器下的pc如何使用映射网络驱动器的方式添加一级路由器下nas共享的文件夹
热门文章
- Delphi XE 10.1 Can't bind address: Address already in use. Exiting.
- Hibernate使用createSqlQuery进行模糊查询时找不到数据
- 在 Windows 上安装Rabbit MQ 指南
- Ubuntu 16.04 安裝chrome
- SVNQuery–如何创建更新索引并查询
- C++ 常量类型 const 详解
- 协同办公OA系统 沉淀企业文化
- Teams 可被滥用于安装恶意软件,微软或不打算修复
- 它决定支付30万美元的勒索金
- Sudo bug 可导致非权限 Linux 和 MacOS 用户以根身份运行命令