mysql 插入中文报错:incorrect string value for column
分别检查数据库、表和字段的字符集编码及排序规则:前两者都为 utf8 或 utf8mb4(支持二进制存储,表情包存储)数据库字符集使用 utf8mb4表字符集使用 utf8mb4最后一个字段的字符集为 latin 之类的,但观察了以下,发现所有表的字段字符集都是这个,这意味着如果要让之后不再报这个错误,需要修改所有的字段的字符集。网上找了一个 修改所有字段字符集 sql :-- 查看某个数据库的表
分别检查数据库、表和字段的字符集编码及排序规则:前两者都为 utf8 或 utf8mb4(支持二进制存储,表情包存储)数据库字符集使用 utf8mb4表字符集使用 utf8mb4最后一个字段的字符集为 latin 之类的,但观察了以下,发现所有表的字段字符集都是这个,这意味着如果要让之后不再报这个错误,需要修改所有的字段的字符集。网上找了一个 修改所有字段字符集 sql :-- 查看某个数据库的表
原因:在 select 查询中某字段使用了子查询获取信息,但因为子查询返回数据多余 1 行,导致无法获取数据解决:将子查询结果限制在 1 行limit 1 解决。
目标增加一个可以远程登录的账号,并设置一下密码和权限。步骤在不记得初始密码的时候,可以使用步骤一来启用一个跳过权限表认证的 mysqld 服务。启用一个跳过权限表认证的 mysqld 服务需要以管理员的身份运行命令行,先将系统中的 mysql 服务关闭: net stop mysql。但我使用的是 phpstudy 开启的 mysql 8.0 服务,这个指令返回了找不到服务,需要从面板里关闭。关闭
看到网上的教程是说不存在这样开启了远程访问的 root 用户,需要去刷新一下权限:grant all privileges on *.* to 'root'@'%' identified by "."; flush privileges; select host,user,password from mysql.user;这个情况是有可能的,就是增加了一个 'root'@'%
原先项目有关金额的部分数据都会定义成 float 或 double 类型,可以肯定的是 32 位存储空间 float 和 64 位存储空间的 double 具有更高的精度。但在实际对数据进行加工,比如 sum 求和等得到的数据会出现更多位的小数。比如手动计算结果 7.75 使用了 sum 函数得到 7.750000059604645。从数字层面上可以很清晰的觉察到数据的精度发生了变化,但这却并不怪
网上找到一篇 使用Navicat for MySQL创建存储过程 的文章,通过查询窗口执行创建 procedure 的语句。CREATE PROCEDURE `insert_boxes`(IN total int) BEGIN declare i int default 1000; while i < total+1500 do insert into boxes (id) values (
正常情况下可以在 select 内嵌套子查询作为结果集的字段,示例如下:select id,name,(SELECT COUNT(id) FROM records WHERE user_id = users.id ) AS box_count FROM users where user_id = 9527;但如果需要子查询的多个字段返回,此时放在 select 是不行的:SELECT SUM(m
行内字段拼接组合可以用到 CONCAT(),如果需要指定分隔符可以使用 CONCAT_WS(',', xx, xx..),但如何将多行数据提取到单行结果中呢?明确需求是,递归查询所属下级的id,最终用表中的 id 拼接成字串。这当然可以放在 php 代码里使用 implode 函数去实现,但这次需要通过 sql 做一个临时的查询。因为所属下级最大层级为 3 级,所以可以通过 sql 的 union
问题说明遇到的情况类似于包含某商品的店铺订单总金额,订单明细表 -> 订单表关系为 n:1。如果明确商品 ID,可以将明细表与订单表关系约束为 1:1,这样计算的订单总金额就不会存在重复统计。但当前需要统计多个商品,这样如果直接通过多表联查并聚合统计店铺订单总金额就会存在重复统计的问题。当然可以直接绕过商品明细表,直接计算商铺订单总金额,但这样无法对商品进行约束。解决网络上有针对单表查询重复
先看一下函数语法:SUM(DISTINCT expression)如果在没有返回匹配行 SELECT 语句中使用 SUM 函数,则 SUM 函数返回 NULL,而不是0。DISTINCT 运算符允许计算集合中的不同值。SUM 函数忽略计算中的 NULL 值。在没有匹配行 SUM 会返回 NULL 而不是 0,这是我之前没有注意到的点。为了让结果不会 NULL 而是 0,可以使用 COALESCE(