mysqldump 导出 emoji 表情损坏的解决办法

默认情况下,mysqldump 会以 utf8 作为字符集执行数据导出,如果记录中存在 emoji 表情符号,有可能导出后变成问号。 对于版本 5.5.4 以上的 mysqldump,可以手动指定 utf8mb4 作为默认字符集。

mysqldump --default-character-set=utf8mb4 ...

这样导出的 SQL 就能正常保存 emoji 符号了。

分类至 MySQL
0条评论

MySQL 字段类型 TEXT 不能设置默认值

某天,给表新增一个字段,类型为 TEXT,想设置默认值为空字符串,SQL 语句如下:

ALTER TABLE `table1` ADD `content` TEXT NOT NULL DEFAULT '';

执行的时候报错了: 

#1101 - BLOB, TEXT, GEOMETRY or JSON column 'content' can't have a default value

就是说,BLOB、TEXT、GEOMETRY、JSON 这些类型的字段是不能设置默认值的。这是由于 MySQL 5.7 默认启用了严格模式导致的。

...

分类至 MySQL
0条评论

MySQL 索引选择性

既然索引可以加快查询速度,那么是不是只要是查询语句需要,就建上索引?答案是否定的。因为索引虽然加快了查询速度,但索引也是有代价的:索引文件本身要消耗存储空间,同时索引会加重插入、删除和修改记录时的负担,另外,MySQL在运行时也要消耗资源维护索引,因此索引并不是越多越好。一般两种情况下不建议建索引...

分类至 MySQL
0条评论

sql 语句添加 force index() 强制使用指定索引

使用 sql 语句查询数据的时候,如果表里有好几个索引,mysql 优化器会自己判断使用哪个索引进行搜索。但是,where 条件比较复杂的时候,优化器使用的索引就不一定是最优索引了。

例如,最近有个需求,查询 4 月份每个商家的微信、支付宝营业额,sql 语句如下...

 

分类至 MySQL
0条评论

SQL 中 INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN 区别

sql中的连接查询有inner join(内连接)、left join(左连接)、right join(右连接)、full join(全连接)四种方式,它们之间其实并没有太大区别,仅仅是查询出来的结果有所不同。

1.inner join,在两张表进行连接查询时,只保留两张表中完全匹配的结果集。

2.left join,在两张表进行连接查询时,会返回左表所有的行,即使在右表中没有匹配的记录。

3.right join,在两张表进行连接查询时,会返回右表所有的行,即使在左表中没有匹配的记录。

4.full join,在两张表进行连接查询时,返回左表和右表中所有没有匹配的行。

分类至 MySQL
0条评论

mysql left join 右表数据不唯一的情况解决方法

1.left join 基本用法

mysql left join 语句格式

A LEFT JOIN B ON 条件表达式

left join 是以A表为基础,A表即左表,B表即右表。

左表(A)的记录会全部显示,而右表(B)只会显示符合条件表达式的记录,如果在右表(B)中没有符合条件的记录,则记录不足的地方为NULL。

2.left join 右表数据不唯一解决方法

如果B表符合条件的记录数大于1条,就会出现1:n的情况,这样left join后的结果,记录数会多于A表的记录数

分类至 MySQL
0条评论

left join on 和 where 条件放置的区别

数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。

在使用 left join 时,on 和 where 条件的区别如下:

1、on 条件是在生成临时表时使用的条件,它不管 on 中的条件是否为真,都会返回左边表中的记录

2、where 条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有 left join 的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

 

分类至 MySQL
0条评论

MYSQL中的int(11)到底代表什么意思?

对于int类型的一些基础知识其实上图已经说的很明白了,在这里想讨论下常用的int(11)代表什么意思,很长时间以来我都以为这代表着限制int的长度为11位,直到有天看到篇文章才明白,11代表的并不是长度,而是字符的显示宽度,在字段类型为int时,无论你显示宽度设置为多少,int类型能存储的最大值和最小值永远都是固定的...

分类至 MySQL
0条评论

MYSQL:int类型升级到bigint,对PHP开发语言影响

因为业务增长,原有的unsigned int已经不够使用,需要升级到unsigned bigint。

MYSQL整数支持的范围:https://dev.mysql.com/doc/refman/5.7/en/integer-types.html

Type Storage Minimum Value Maximum Value
  (Bytes) (Signed/Unsigned) (Signed/Unsigned)
TINYINT 1 -128 127
    0 255
SMALLINT 2 -32768 32767
    0 65535
MEDIUMINT 3 -8388608 8388607
    0 16777215
INT 4 -2147483648 2147483647
    0 4294967295
BIGINT 8 -9223372036854775808 9223372036854775807
    0 18446744073709551615

可以看到bigint支持的数量级非常大。虽然mysql字段类型调整了,但是我们的开发语言是否支持呢?

 

分类至 MySQL
0条评论