字符串

字符串的长度

获取字符串长度的两个函数

函数 特点 使用场景
length 把1个汉字当成2个字节来计算 计算字符串在计算机中的存储字节长度
char_length 按照字符的方式来计算,1个汉字算 计算肉眼读取的字符个数
  1. select length("我"); // 2
  2. select char_length("我") //1
  3. select length("f我"); //3
  4. select char_length("f我"); //2

常见字符类型

varchar, char, text 是常见的字符串类型;

  • 其中 char 是定长的,性能最好,如果小于定长,Mysql 会使用空格补齐;所以使用于固定长度的场景;
  • varchar 性能次之,支持65535个字节;
  • text 性能最差;

    字符串常见函数

    字符串长度
char_length('xxxx')

拼接字符串

concat('1','2','3')

浮点数

类型 特点
float 精度不高,当数据是整数则以整数存储,小数则以小数存储。如默认值为0.00存储为0
decimal 精度有要求,可以指定小数位。decimal(length,precision).length 指总长度, precision指的是小数部分长度

decimal

  1. decimal 在 mysql 内部是使用字符串的形式来存储的,所以能保存精度。
  2. 适用于存储 价格、金额对精度要求不高,但对准确度要求非常高的字段。
  3. 使用的工具 dbeaver, 显示 decimal 时如果小数部分为零,则默认不显示。在 cmd 终端显示正常,怪不得有相当一部分人直接使用终端,不使用编辑工具。
  4. decimal 和 numeric 是同一类型

    整数型

    使用整数型应该注意所占空间
类型 空间
tinyint 1字节
smallint 2字节
mediumint 3字节
int 4字节
bigint 8字节

数值常用函数

取绝对值

  1. ABS(x),absolutely,取绝对值

    四舍五入

  2. ROUND(x,precision),四舍五入

    字符串与数字类型转化

    -- 自动会发生类型转化
    '2.3' + 0
    

    json 类型

    参考:https://mp.weixin.qq.com/s/QqnC502jnuGcKnpgD0OKaw

    插入数据

    创建表:

    create table test1(id int,info json);
    

    插入数据:

    insert into test1 values (1,'{"name":"yeyz","age":26}'),(2,'{"name":"zhangsan","age":30}'),(3,'{"name":"lisi","age":35}');
    

    image.png

    嵌套查询

  • json_extract 表示使用嵌套查询;
  • $符号代表的是 json 对象;
  • 使用 $.field 的形式进行嵌套查询

    select * from test1 where json_extract(info,"$.age")>=30;
    

    image.png

    json_valid 是否为 json

  • 1 返回是;

  • 0 返回否
    select json_valid(2);
    // 0
    

    json_keys

    json_keys传回执行json字段最上一层的key值
    select json_keys('{"name":"yeyz","score":100}');
    
    结果:
    ["name", "score"]
    

    json_contains_path 成员检查

mysql> set @j='{"a":1,"b":2,"c":{"d":4}}';
Query OK, 0 rows affected (0.00 sec)
#one的意思是只要包含一个成员,就返回1
mysql> select json_contains_path(@j,'one','$.a','$.e');
+------------------------------------------+
| json_contains_path(@j,'one','$.a','$.e') |
+------------------------------------------+
|                                        1 |
+------------------------------------------+
1 row in set (0.00 sec)
#all的意思是所有的成员都包含,才返回1

查看所有值 *

{
  "a":1,
  "b":2,
  "c":
     {
        "d":4
     }
  "e":
     {
      "d":
         {
         "ddd":
         "5"
         }
     }
}
mysql> set @j='{"a":1,"b":2,"c":{"d":4},"e":{"d":{"ddd":"5"}}}';
Query OK, 0 rows affected (0.00 sec)
#所有成员
mysql> select json_extract(@j,'$.*');
+---------------------------------------+
| json_extract(@j,'$.*')                |
+---------------------------------------+
| [1, 2, {"d": 4}, {"d": {"ddd": "5"}}] |
+---------------------------------------+
1 row in set (0.00 sec)

布尔值

在 Mysql 中布尔值和 tinyint 是同一个含义:

  • 1 代表 true;
  • 0 代表 false;
    select true,FALSE;
    

image.png