不要在Mysql中使用utf8
Mysql中utf8并不是真正意义上的utf8,而是指的是utf8mb3,这种字符集仅支持BMP字符,码位在0到65535之间,不支持一些补充字符,例如一些生僻字和emoji表情。utf8mb3是Mysql早期就支持的字符集,由于不支持补充字符,Mysql在5.5.3之后的版本里面增加了utf8mb4的编码。在未来Mysql版本中,可能会删除utf8mb3字符集。utf8mb4支持BMP和补充字符,对于BMP字符,utf8mb4和utf8mb3相同,但是对于补充字符,utf8mb4需要4个字节存储,utf8mb3每个字符最多使用3个字节,无法存储该字符,所以在创建表,使用utf8mb4,而不是utf8或者utf8mb3。
| 字符集 | 支持的字符 | 每个字符存储需要的字节 |
|---|---|---|
| utf8mb3、utf8(deprecated) | BMP | 1~3字节 |
| ucs2 | BMP | 2字节 |
| utf8mb4 | BPM和补充字符 | 1~4字节 |
| utf16 | BMP和补充字符 | 2字节或4字节 |
| utf16le | BMP和补充字符 | 2字节或4字节 |
| utf32 | BMP和补充字符 | 4字节 |
Mysql官方文档说明:https://dev.mysql.com/doc/refman/8.0/en/charset-unicode.html
小数类型使用decimal
推荐使用decimal,不建议使用float和double,float和double会有精度丢失的问题,并且在比较值或者进行减法运算时可能会出现问题。decimal是定点数,在MySQL中,定点数是以字符串形式存储,所以在精度要求比较高时,推荐使用decimal类型。如果存储的数据超出decimal访问时,可以将数据按照整数和小数分开存储。
| 数据类型 | 说明 | 存储字节 |
|---|---|---|
| float | 单精度浮点数 | 4个字节 |
| double | 双精度浮点数 | 8个字节 |
| decimal(M, D),M默认值是10 | 压缩的"严格"定点数 | 根据M和D而定 |
官网decimal存储字节表格
| Leftover Digits | Number of Bytes |
|---|---|
| 0 | 0 |
| 1-2 | 1 |
| 3-4 | 2 |
| 5-6 | 3 |
| 7-9 | 4 |
decimal存储字节计算:Mysql是将每9位十进制存储为4个字节。
例如:以官网例子为例
decimal(18, 9):小数部分是9,需要4个字节,整数部分也是9,也需要4个字节。
decimal(20, 6): 小数部分是6,需要3个字节,整数部分是14,14-9=5,整数部分需要4个字节+剩余的5个存储需要的3个字节。
推荐统计值使用count(*)
在阿里JAVA开发手册中推荐使用count(*),不要使用count(列名),count(常量)。count(列名)会查询符合条件的并且列的值不为NULL的行数,也就是说会过滤掉列为NULL的行,除非有特殊的需求,所以一般不要使用。count(*)在MySQL8.0.13之后对SELECT COUNT(*) FROM tbl_name进行了优化,效率得到提升。InnoDB引擎count(*)和count(1)其实是一样的,不存在谁快谁慢的问题,不过推荐使用count(*),符合SQL92定义的标准统计行数的语法。以下附上官网关于count(*)的说明及链接,感兴趣的小伙伴可以研究研究官方文档。
MySQL官方文档说明:https://dev.mysql.com/doc/refman/8.0/en/aggregate-functions.html#function_count
As of MySQL 8.0.13, SELECT COUNT(*) FROM tbl_name query performance for InnoDB tables is optimized for single-threaded workloads if there are no extra clauses such as WHERE or GROUP BY.
InnoDB handles SELECT COUNT(*) and SELECT COUNT(1) operations in the same way. There is no performance difference.
原文链接:https://monkey.blog.xpyvip.top/archives/qian-tan-mysql-chang-jian-zhu-yi-shi-xiang-yi
文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co
文章目录git常用命令(简介,详细参数往下看)Git提交代码步骤gitpullgitstatusgitaddgitcommitgitpushgit代码冲突合并问题方法一:放弃本地代码方法二:合并代码常用命令以及详细参数gitadd将文件添加到仓库:gitdiff比较文件异同gitlog查看历史记录gitreset代码回滚版本库相关操作远程仓库相关操作分支相关操作创建分支查看分支:gitbranch合并分支:gitmerge删除分支:gitbranch-ddev查看分支合并图:gitlog–graph–pretty=oneline–abbrev-commit撤消某次提交git用户名密码相关配置g
作为新的阿里云用户,您可以50免费试用多种优惠,价值高达1,700美元(或8,500美元)。这将让您了解和体验阿里云平台上提供的一系列产品和服务。如果您以个人身份注册免费试用,您将获得价值1,700美元的优惠。但是,如果您是注册公司,您可以选择企业免费试用,提交基本信息通过企业实名注册验证,即可开始价值$8,500的免费试用!本教程介绍了如何设置您的帐户并使用您的免费试用版。关于免费试用在我们开始此试用之前,您还必须遵守以下条款和条件才能访问您的免费试用:只有在一年内创建的账户才有资格获得阿里云免费试用。通过此免费试用优惠,用户可以免费试用免费试用活动页面上列出的每种产品一次。如果您有多个帐
我正在构建一个应用程序,想知道是否将未使用的对象设置为nil是生产级编码中的常见做法。我知道这只是垃圾收集器的提示,并不总是处理对象。 最佳答案 根据这个thread如果您使用完一个成员对象,将其设置为nil将引发被引用对象被垃圾回收。如果它是局部变量,方法exit将做同样的事情。也就是说,如果您要求将成员显式设置为nil,我会质疑您的设计。 关于ruby-将对象设置为nil是否很常见?,我们在StackOverflow上找到一个类似的问题: https://
我看到其他人也遇到过类似的问题,但没有一个解决方案对我有用。0.3.14gem与其他gem文件一起存在。我已经完全按照此处指示完成了所有操作:https://github.com/brianmario/mysql2.我仍然得到以下信息。我不知道为什么安装程序指示它找不到include目录,因为我已经检查过它存在。thread.h文件存在,但不在ruby目录中。相反,它在这里:C:\RailsInstaller\DevKit\lib\perl5\5.8\msys\CORE\我正在运行Windows7并尝试在Aptana3中构建我的Rails项目。我的Ruby是1.9.3。$gemin
我最近与一位同事讨论了以下Ruby语法:value=ifa==0"foo"elsifa>42"bar"else"fizz"end我个人并没有看到太多这种逻辑,但我的同事指出,这实际上是一种相当普遍的Rubyism。我试着用谷歌搜索这个主题,但没有找到任何文章、页面或SO问题来讨论它,这让我相信这可能是一种非常实际的技术。然而,另一位同事发现语法令人困惑,而是将上面的逻辑写成这样:ifa==0value="foo"elsifa>42value="bar"elsevalue="fizz"end缺点是value=的重复声明和隐式elsenil的丢失,如果我们想使用它的话。这也感觉它与Ruby
我已经开始使用mysql2gem。我试图弄清楚一些基本的事情——其中之一是如何明确地执行事务(对于批处理操作,比如多个INSERT/UPDATE查询)。在旧的ruby-mysql中,这是我的方法:client=Mysql.real_connect(...)inserts=["INSERTINTO...","UPDATE..WHEREid=..",#etc]client.autocommit(false)inserts.eachdo|ins|beginclient.query(ins)rescue#handleerrorsorabortentirelyendendclient.commi
安全产品安全网关类防火墙Firewall防火墙防火墙主要用于边界安全防护的权限控制和安全域的划分。防火墙•信息安全的防护系统,依照特定的规则,允许或是限制传输的数据通过。防火墙是一个由软件和硬件设备组合而成,在内外网之间、专网与公网之间的界面上构成的保护屏障。下一代防火墙•下一代防火墙,NextGenerationFirewall,简称NGFirewall,是一款可以全面应对应用层威胁的高性能防火墙,提供网络层应用层一体化安全防护。生产厂家•联想网御、CheckPoint、深信服、网康、天融信、华为、H3C等防火墙部署部署于内、外网编辑额,用于权限访问控制和安全域划分。UTM统一威胁管理(Un
目录一.大致如下常见问题:(1)找不到程序所依赖的Qt库version`Qt_5'notfound(requiredby(2)CouldnotLoadtheQtplatformplugin"xcb"in""eventhoughitwasfound(3)打包到在不同的linux系统下,或者打包到高版本的相同系统下,运行程序时,直接提示段错误即segmentationfault,或者Illegalinstruction(coredumped)非法指令(4)ldd应用程序或者库,查看运行所依赖的库时,直接报段错误二.问题逐个分析,得出解决方法:(1)找不到程序所依赖的Qt库version`Qt_5'
2022年底,OpenAI的预训练模型ChatGPT给人工智能领域的爱好者和研究人员留下了深刻的印象和启发,他展现的惊人能力将人工智能的研究和应用热度推向高潮,网上也充斥着和ChatGPT的各种聊天,他可以作诗、写小说、写代码、讨论疫情问题等。下面就是一些他的神回复:人命关天的坑: 写歌,留给词作者的机会不多了。。。 回答人类怎么样面对人工智能: 什么是ChatGPT?借用网上的一段介绍,ChatGPT是由人工智能研究实验室OpenAI在2022年11月30日发布的全新聊天机器人模型,一款人工智能技术驱动的自然语言处理工具。它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动