前言:


先安利一个综艺: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占几个字节_随笔几个小问题相关推荐

  1. float占几个字节_一个HashMap对象占多少字节?

    对象=对象头+成员变量+对齐填充 对象头结构:java对象在Heap里面的结构是这样的:对象头跟对象体,对象体跟C里面的结构体是一样的,对象头由两个域组成:用于存放hashcode.同步.GC的_ma ...

  2. java中double类型占几个字节_面试官:Java 中有几种基本数据类型是什么?各自占用多少字节?...

    认识基本数据类型 在学习基本数据类型之前,我们先认识一下这两个单词:1.bit --位:位是计算机中存储数据的最小单位,指二进制数中的一个位数,其值为"0"或"1&quo ...

  3. 64位 int 占几个字节_面试常考,项目易错,长文详解C/C++中的字节对齐

    面试常考,项目易错,长文详解C/C++中的字节对齐​mp.weixin.qq.com 引入主题,看代码 我们先来看看以下程序 //编译器:https://tool.lu/coderunner/ //来 ...

  4. 一个中文字符占几个字节_字节与字符的关系

    简介 字节(Byte)是计量单位,表示数据量多少,二进制数据,是计算机信息技术用于计量存储容量的一种计量单位,通常情况下一字节等于八位.通常在读取图片.声音.可执行文件需要用字节数组来保存文件,在下载 ...

  5. mysql utf8占几个字节_数据库表字段缓存_一个汉字在数据库占几个字节?

    1.oracle10g数据库表字段为varchar(n)类型,存英文很简单,只要字母个数不大于n即可. 但是对于汉字,按照同样的方法就不行了.因为对于汉字不同的字符集, 在数据库占用的字节是不一样的. ...

  6. python int占几个字节_小白学python第1问: int 占几个字节?

    windows 64位机器,python3.7:后面的文章中,没有特别说明的话,都是在该环境下运行 int 占几个字节? C语言中(GCC编译器),int 占据4个字节,python呢? 我们用pyt ...

  7. python中utf8占几个字节_为什么utf8占用3个字节

    UNICODE是万能编码,包含了所有符号的编码,它规定了所有符号在计算机底层的二进制的表示顺序.有关Unicode为什么会出现就不叙述了,Unicode是针对所有计算机的使用者定义一套统一的编码规范, ...

  8. python一个字符占几个字节_关于python:这个字节字符串实际占用了多少内存?

    我的理解是os.urandom(size)输出一个给定"size"的随机字节串,但是: import os import sys print(sys.getsizeof(os.ur ...

  9. python一个中文占几个字节_中文在python中占几个字节

    如果是utf-8编码,那么一个中文字符占用三个字节,一个英文字符占用一个字节.如果是gbk编码,那么一个中文字符占用两个字节,一个英文字符占用一个字节. 如果是utf-8编码,那么一个中文包含繁体字等 ...

最新文章

  1. van Emda Boas
  2. 【Socket网络编程】17. recv() 函数详解
  3. 2.3.5 用信号量实现 进程互斥 同步 前驱关系
  4. opencv 报错:Error: Assertion failed (data) in cv::Mat::at, file ... mat.inl.hpp, line 897(访问了不存在矩阵的像素)
  5. postman发送object_.NetCore HttpClient发送请求的时候为什么自动带上了一个RequestId头部...
  6. 前端学习(1504):组件通信的几种情况
  7. 2个js实现图片轮播效果(用)
  8. Oracle学习 第26天 Toad试用感受
  9. IdTCP的C++Builder2010示例(转)
  10. 能打开java文件的软件有哪些_使用JAVA打开本地应用程序相关的文件
  11. python中排序从小到大_Python实现对特定列表进行从小到大排序操作示例
  12. Java基础知识强化之网络编程笔记22:Android网络通信之 Android常用OAuth登录(获取个人信息)...
  13. 手机计算机不支持此操作系统,Win10计算机投影屏幕此设备不支持Miracast
  14. SQL Server迁移数据库文件(ldfmdf文件)到其他盘
  15. 计算机系统配置有哪些,电脑的配置基本知识 电脑有哪些基本配置
  16. 数据标注员需要专业系统的学习么?
  17. 【MVC 4】4.MVC 基本工具(Visual Studio 的单元测试、使用Moq)
  18. 带你揭秘华为5G为何地表最强
  19. linux开启rdp服务,让windows电脑mstsc远程,linux rdesktop远程windows机器
  20. 二级路由器下的pc如何使用映射网络驱动器的方式添加一级路由器下nas共享的文件夹

热门文章

  1. Delphi XE 10.1 Can't bind address: Address already in use. Exiting.
  2. Hibernate使用createSqlQuery进行模糊查询时找不到数据
  3. 在 Windows 上安装Rabbit MQ 指南
  4. Ubuntu 16.04 安裝chrome
  5. SVNQuery–如何创建更新索引并查询
  6. C++ 常量类型 const 详解
  7. 协同办公OA系统 沉淀企业文化
  8. Teams 可被滥用于安装恶意软件,微软或不打算修复
  9. 它决定支付30万美元的勒索金
  10. Sudo bug 可导致非权限 Linux 和 MacOS 用户以根身份运行命令