MySQL

分类下相关文章

通过 mysql select 结果导出到 txt 文本批量提交历史内容到熊掌号

周六花了一个小时支持了 MIP 网页,今天再接再厉将历史内容全部提交到熊掌号。 首先将数据库中的所有笔记的链接导出: SELECT CONCAT("https://www.sunzhongwei.com/mip/", slug) FROM articles order by id desc INTO OUTFILE '/tmp/urls.txt' 但是报错 ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this ...

阅读全文...

MySQL 中使用条件语句输出查询结果

例如,我想把数据表中的数据导出成可读的结果。 select `pay_status`, if(pay_status = 0, '未支付', '已支付') as pay_status from order 0 未支付 0 未支付 1 已支付 ...

阅读全文...

使用 MySQL 存储 schema-less 数据的探索

table design: 表结构做成 id, key, value 还是 key, value 比较好。 按照 Bret Taylor 的分享,比较好的设计是 added_id -> INT NOT NULL AUTO_INCREMENT PRIMARY KEY id -> UNIQUE KEY updated -> KEY body -> json 之所以加上自增的 added_id, 是因为 Mysql InnoDB 是按照主键顺序在磁盘上顺序存储 数据的。这样就能保证新数据总是能写在旧数据的后面,因为新数据读取的频率总会高于 旧数据,磁头不会波动太大。 e. ...

阅读全文...

使用 crontab & mysqldump 对 MySQL 数据库进行自动定时备份

crontab 配置 crontab 中添加 30 4 * * * /usr/bin/mysqldump -uuser db > /path/to/backups/db-`date +"\%Y_\%m_\%d_\%H"`.sql 即每天凌晨 4 点半进行自动备份 注意,这里不要加 -p 参数。 如何自动输入密码 不安全的方式是 直接在 crontab mysqldump 命令的参数中用 -p 指定密码,但是这样做有巨大的风险。 因为,任何用户都可以通过 ps axuw | grep mysqldump 看到进程的命令参数。 一种安全的方式是 在用户的根目录添加配置文 ...

阅读全文...

MySQL 替换 text 字段中的指定字符串

昨天将博客启用了 HTTPS,发现一个包含 js 的 markdown 文章显示异常。 vuejs 中如何优雅的获取 Input 值 导致异常的原因是,https 页面引用了 http 的 js 文件,即 vuejs 的 cdn 链接使用了 http 的。 解决方法就是直接在 mysql 中进行替换 UPDATE articles SET content = REPLACE(content, "http", "https") where slug = 'how-to-get-input-value-in-vuejs'; 如果需要批量替换数据表中的 h ...

阅读全文...

MySQL 保存 emoji 表情失败报错

有朋友在博客评论里反馈,无法提交带 emoji 表情的评论。第一反应是数据库编码问题。 由于一直不习惯使用 emoji,所以这个问题一直没发现。 Laravel 的报错信息 production.ERROR: SQLSTATE[HY000]: General error: 1267 Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8mb4_unicode_ci,COERCIBLE) for operation '=' MySQL CHARSET 与 COLLATE 的区别 https://stackoverflow. ...

阅读全文...

MySQL 导出指定数据表中的一行记录

场景 开发环境的一行配置(存于数据库中),我想导出到线上配置。 使用 Laravel Seeds 会导致全表被覆盖,所以只需要在线上插入一行。 两种方案: MySQl Workbench SELECT * FROM settings where id=10; 点击查询结果栏的按钮 “Export recordset to an external file“ 文件格式选择 SQL INSERT statements 即可。 复制到线上 MySQL 命令行执行即可。 MySQL 命令行 mysqldump -uxxx -p databasename tablename --where &quot ...

阅读全文...

mysql 字段并不是越大越好,这不 php 内存爆掉了

为了一时之快,将存储商品描述的字段由 text 变更成了 longtext。 结果,由于升级 summernote 版本,导致图片上传 cdn 的回调函数失效,新上传图片都被转换成了 base64 存储与描述字段中。每个商品至少有 10 张这种图片,一张图片大概1兆左右。原本如果使用 text 是可以规避这个问题的,因为 text 存储的内容大概为 65k,而 longtext 存储上限大概为 4G,所以默认的 php 内存上限被轻松超过。 2017/10/28 18:12:09 [error] 26887#26887: *839609 FastCGI sent in stderr: &qu ...

阅读全文...

summernote 编辑器保存的内容超出了 MySQL TEXT 的长度限制

昨晚收到一堆微信小程序后台的报警邮件。但是邮件内容看不到,登录服务器查看 laravel 日志,发现是 summernote 保存的商品描述过长,超出了 TEXT 的长度限制 String data, rig ht truncated: 1406 Data too long for column 'description' at row 1 at vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOStatement.php:107, PDOException(code: 22001): SQLSTATE[22001]: String data, ...

阅读全文...

MySQL 非 NULL 值返回 1, NULL 值返回 0

这是一个判断购物车中商品是否已失效的查询语句。需要返回一个字段标示是否失效。 select cart.product_name, (products.name IS NOT NULL) as valid from cart left outer join products on cart.product_id = products.id; 包邮农家自制霉干菜 1 包邮农家自制巨无霸菜 0 广西农家有机生姜 1 ...

阅读全文...

MySQL inner join 与 left/right outer join 的区别及查询逻辑

例如,商品表与类型表,要查询指定类型名的商品,使用 inner join 还是 left outer join 呢? 用 left outer join 肯定没有问题,但是用 inner join 是否可以呢? 用真实数据来测试一下 Product 表 CREATE TABLE `product` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `category_id` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) EN ...

阅读全文...

MySQL 唯一约束 Unique 是否允许存在多个 NULL 值

实际测试结果,允许多个 NULL。 但是不允许多个空字符串 “” 我觉得这是合理的,例如,我可以不填写手机号,但是,如果我填写了,就必须是唯一的。 注意,并不是所有的数据库都是这个标准 SQL Server 就不允许存在多个 NULL 值 ...

阅读全文...

MySQL 中 Decimal, Float, Double 的区别

最近在写小程序商城,不可避免的遇到价格的存储问题 如果要存交易额的话,通常使用什么类型? 凡是跟钱相关的都需要使用 Decimal。 Decimal 是精确存储 float, double 是近似存储,并不精确 做个简单的测试。 首先建表 CREATE TABLE `payment` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL, `count` decimal(10,5) DEFAULT NULL, `count2` float ...

阅读全文...

Laravel Backpack 后台列表页面查询关键词包含中文时报错

报错信息如下 Next Illuminate\Database\QueryException: SQLSTATE[HY000]: General error: 1271 Illegal mix of collations for operation 'like' (SQL: select count(*) as aggregate from `worker` where (`id` like %是是% or `na me` like %是是% or `tel` like %是是% or `project` like %是是% or `team` like %是是% or `role` li ...

阅读全文...

MySQL 使用另一个表的已存储数据为当前表对应字段赋值

例如, store 存储的是商铺的基本信息,包括商铺 id, 商铺名称 collection 存储的是收银记录,包括金额,商铺 id 现在为了避免联表查询,需要在 collection 表中增加一个冗余字段,StoreName 用于存储商铺名称,并从 store 表导入商铺名称。 SQL 具体如下 UPDATE collection, store SET collection.StoreName = store.StoreName WHERE collection.StoreID = store.StoreID ...

阅读全文...