mysql函数

IP地址在mysql的存储

老子叫甜甜 提交于 2020-02-23 06:03:13
因为int比varchar(15)更高效,且php和mysql都有ip和int互转的函数,所以在ip地址在mysql中用int存储最优。 mysql存储这个值是字段需要用int UNSIGNED。不用UNSIGNED的话,128以上的IP段就存储不了了。 echo ip2long('192.168.1.38'); //输出:3232235814 SELECT INET_ATON('192.168.1.38'); -- 输出:3232235814 两个函数返回的结果是一样的,都是 A*256*256*256+B*256*256+C*256+D 的算法 192*256*256*256+168*256*256+1*256+38 = 3 232 235 814 反过来,从int转换为IP地址分别是php的 long2ip() 和mysql的 INET_ATON() 。 php存入时:$ip = ip2long($ip); mysql取出时:SELECT INET_ATON(ip) FROM table ... php取出时,多一步:$ip = long2ip($ip); 来源: https://www.cnblogs.com/lovelp/p/6667224.html

利用mysql的inet_aton()和inet_ntoa()函数存储IP地址

一曲冷凌霜 提交于 2020-02-23 05:57:29
mysql> create table jackbillow (ip int unsigned, name char(1)); Query OK, 0 rows affected (0.02 sec) mysql> insert into jackbillow values(inet_aton('192.168.1.200'), 'A'), (inet_aton('200.100.30.241'), 'B'); Query OK, 2 rows affected (0.00 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql> insert into jackbillow values(inet_aton('24.89.35.27'), 'C'), (inet_aton('100.200.30.22'), 'D'); Query OK, 2 rows affected (0.00 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql> select * from jackbillow; +------------+------+ | ip | name | +------------+------+ | 3232235976 | A | | 3362004721 | B | | 408494875

Mysql的建表规范与注意事项

99封情书 提交于 2020-02-22 04:14:57
一、 表设计规范 库名、表名、字段名必须使用小写字母,“_”分割。 库名、表名、字段名必须不超过12个字符。 库名、表名、字段名见名知意,建议使用名词而不是动词。 建议使用InnoDB存储引擎。 存储精确浮点数必须使用DECIMAL替代FLOAT和DOUBLE。 建议使用UNSIGNED存储非负数值。 建议使用INT UNSIGNED存储IPV4。 整形定义中不添加长度,比如使用INT,而不是INT(4)。 使用短数据类型,比如取值范围为0-80时,使用TINYINT UNSIGNED。 不建议使用ENUM类型,使用TINYINT来代替。 尽可能不使用TEXT、BLOB类型。 VARCHAR(N),N表示的是字符数不是字节数,比如VARCHAR(255),可以最大可存储255个汉字,需要根据实际的宽度来选择N。 VARCHAR(N),N尽可能小,因为MySQL一个表中所有的VARCHAR字段最大长度是65535个字节,进行排序和创建临时表一类的内存操作时,会使用N的长度申请内存。 表字符集选择UTF8。 使用VARBINARY存储变长字符串。 存储年使用YEAR类型。 存储日期使用DATE类型。 存储时间(精确到秒)建议使用TIMESTAMP类型,因为TIMESTAMP使用4字节,DATETIME使用8个字节。 建议字段定义为NOT NULL。 将过大字段拆分到其他表中。

mysql 存储过程及事件

£可爱£侵袭症+ 提交于 2020-02-21 10:24:59
虽说现在不用这种,mysql本身已经很忙碌了,还要做这些操作不合适,但有时候别人的代码会写这些,所以记录下查找的、 查询数据库中的存储过程和函数 select `name` from mysql.proc where db = 'xx' and `type` = 'PROCEDURE' //存储过程 select `name` from mysql.proc where db = 'xx' and `type` = 'FUNCTION' //函数 show procedure status; //存储过程 show function status; //函数 查看存储过程或函数的创建代码   show create procedure proc_name;   show create function func_name; 查看视图   SELECT * from information_schema.VIEWS //视图   SELECT * from information_schema.TABLES //表 查看触发器   SHOW TRIGGERS [FROM db_name] [LIKE expr]   SELECT * FROM triggers T WHERE trigger_name=”mytrigger” \G 如果有存储过程,在代码里边找不到调用存储过程的函数。

对MYSQL注入相关内容及部分Trick的归类小结

一世执手 提交于 2020-02-21 09:16:48
前言 最近在给学校的社团成员进行web安全方面的培训,由于在mysql注入这一块知识点挺杂的,入门容易,精通较难,网上相对比较全的资料也比较少,大多都是一个比较散的知识点,所以我打算将我在学习过程中遇到的关于的mysql注入的内容给全部罗列出来,既方便个人之后的复习,也方便后人查找相关资料。 本文部分内容可能会直接截取其他大牛的文章,截取的内容我都会进行声明处理。如有侵权,请发email联系我(asp-php#foxmail.com)删除。 本文首发于先知社区,转载需注明来源+作者ID:Yunen。 Mysql简介 在正式讲解mysql注入的内容前,我认为还是有必要说明一下什么是mysql、mysql的特点是什么等内容,这些东西看起来可能对注入毫无帮助,开始却能很好的帮助我们学习,融会贯通。 MySQL是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是一种 关联数据库管理系统 ,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。 MySQL是 开源 的,所以你不需要支付额外的费用。 MySQL使用 标准的 SQL 数据语言 形式。 MySQL可以运行于多个系统上,并且 支持多种语言 。这些编程语言包括 C、C++、Python、Java、Perl、PHP、Eiffel

mysql -批量插入数据脚本

被刻印的时光 ゝ 提交于 2020-02-21 03:25:57
建表: create table dept( id int unsigned primary key auto_increment, deptno mediumint unsigned not null default 0, dname varchar(20) not null default '', loc varchar(13) NOT null default '' ) engine=innodb default charset=GBK; create table emp ( id int unsigned primary key auto_increment, empno mediumint unsigned not null default 0, ename varchar(20) NOt null default '', job varchar(9) not null default '', mgr mediumint unsigned not null default 0, hiredate DATE not null , sal decimal(7,2) NOT null, comm decimal(7,2) not null, deptno mediumint unsigned not null default 0 )engine=innodb default

mysql笔记

百般思念 提交于 2020-02-19 05:05:04
目录 1.开始创建数据库、创建数据库中的表 2.关于表的一些操作 3.主键/外键/唯一约束/检查约束/默认值约束/非空约束 4.select 1).select中的 DISTINCT去重 以及选取指定行数 LIMIT 2).select中 ORDER BY 3).WHERE 子句来指定查询条件 4).INNER JOIN 子句来指定查询条件 5).OUTER JOIN 6).子查询 7).GROUP BY 8).HAVING 9).正则表达式REGEXP 5.INSERT 1.向表中全部字段插入值 2.向指定字段插入值 3.使用 INSERT INTO…FROM 语句复制表数据 6.UPDATE语句来修改、DELETE语句删除 1.修改/删除表中的数据 2.根据条件/删除修改 7.视图 1).视图的创建与查询 2).修改视图 3).删除视图 8.创建函数 1).创建并使用自定义函数 2).修改自定义函数 3).删除自定义函数 9.常用运算符 1.开始创建数据库、创建数据库中的表 #连接数据库 mysql -u root -p #创建数据库并设置指定字符集和校对规则 create database < database_name > if not exist < database_name > DEFAULT CHARACTER SET utf8 DEFAULT COLLATE

MySQL创建存储过程(CREATE PROCEDURE)

﹥>﹥吖頭↗ 提交于 2020-02-18 05:30:35
MySQL 存储过程是一些 SQL 语句的集合,比如有的时候我们可能需要一大串的 SQL 语句,或者说在编写 SQL 语句的过程中还需要设置一些变量的值,这个时候我们就完全有必要编写一个存储过程。下面我们来介绍一下如何创建一个存储过程。 基本语法 可以使用 CREATE PROCEDURE 语句创建存储过程。 语法格式如下: CREATE PROCEDURE <过程名> ( [过程参数[,…] ] ) <过程体> [过程参数[,…] ] 格式 [ IN | OUT | INOUT ] <参数名> <类型> 语法说明如下: 1) 过程名 存储过程的名称,默认在当前数据库中创建。若需要在特定数据库中创建存储过程,则要在名称前面加上数据库的名称,即 db_name.sp_name。需要注意的是,名称应当尽量避免选取与 MySQL 内置函数相同的名称,否则会发生错误。 2) 过程参数 存储过程的参数列表。其中, <参数名> 为参数名, <类型> 为参数的类型(可以是任何有效的 MySQL 数据类型)。当有多个参数时,参数列表中彼此间用逗号分隔。存储过程可以没有参数(此时存储过程的名称后仍需加上一对括号),也可以有 1 个或多个参数。 MySQL 存储过程支持三种类型的参数,即输入参数、输出参数和输入/输出参数,分别用 IN、OUT 和 INOUT 三个关键字标识。其中

sqli-宽字节注入

*爱你&永不变心* 提交于 2020-02-18 00:03:15
0x0 背景 当某字符的大小为一个字节时,称其字符为窄字节. 当某字符的大小为两个字节时,称其字符为宽字节. 所有英文默认占一个字节,汉字占两个字节 常见的宽字节编码:GB2312,GBK,GB18030,BIG5,Shift_JIS等等 0x1 宽字节注入原理 程序员为了防止sql注入,对用户输入中的单引号(’)进行处理,在单引号前加上斜杠(\)进行转义,这样被处理后的sql语句中,单引号不再具有‘作用’,仅仅是‘内容’而已,换句话说,这个单引号无法发挥和前后单引号闭合的作用,仅仅成为‘内容‘ 【再举个例子,要找某位名字里带单引号的用户,搜索的时候,就要让单引号成为内容去搜索,而不能起到其他作用】 而安全测试人员要绕过这个转义处理,使单引号发挥作用,有两个思路: 让斜杠(\)失去作用 让斜杠(\)消失 第一个思路就是借鉴程序员的防范思路,对斜杠(\)转义,使其失去转义单引号的作用,成为‘内容’ 第二个思路就是宽字节注入 当使用宽字节编码,如:GBK时,两个连在一起的字符会被认为是汉字,我们可以在单引号前加一个字符,使其和斜杠(\)组合被认为成汉字,从未达到让斜杠消失的目的,进而使单引号发挥作用 注意:前一个字符的Ascii要大于128,两个字符才能组合成汉字 0x2 注入方法 0x21 黑盒 可以看到,在发现单引号被转义后,当我们加了%df后,sql语句报错,说明单引号发挥了作用

MySQL

烈酒焚心 提交于 2020-02-17 09:34:30
MySQL 分页查询: LIMIT基本实现方式 分页查询其实就是限制输出和跳过输出的结合 SELECT * FROM table LIMIT M OFFSET N ,其中 LIMIT M OFFSET N 可以写成 LIMIT N, M eg. mysql> select * from news limit 490000,10 其实关于实现MySQL分页的最简单的方法用利用mysql数据库的LIMIT函数,LIMIT [offset,] rows可以从MySQL数据库表中第M条记录开始检索N条录的语句为: SELECT * FROM [TABLE_NAME] LIMIT M,N 例如从表Sys_option(主键为sys_id) 中从第10条记录开始检索20条记录,语句如下: mysql> select * from sys_option limit 10, 20 一般情况下,客户端通过传递 pageNo(页码)、pageSize(每页条数)两个参数去分页查询数据库中的数据,在数据量较小(元组百/千级)时使用 MySQL自带的 limit 来解决这个问题。 建立主键或者唯一索引 假设主键或者唯一索引为 good_id 收到客户端{pageNo:5,pagesize:10} select * from table where good_id > (pageNo-1)*pageSize