Submitted by gouki on 2012, May 16, 9:17 PM
一个句子的迁移,一个粗心:
原mysql代码是:select date_format(from_unixtime(xxx),'%Y-%M') as xxxxx from table group by xxxxx
sql server转换后:
select (select dateadd(ss,xxx,'1970-01-01 08:00:00')) as xxxxx from table group by xxxxx
因为sql server不支持将as 后的内容做聚集,只能:
select dateadd(ss,xxx,'1970-01-01 08:00:00') as xxxxx from table group by (select dateadd(ss,xxx,'1970-01-01 08:00:00'))
但又报错,说是group by 不能使用子查询。
仔细想了想,(select dateadd(ss,xxx,'1970-01-01 08:00:00')) as xxxxx,这个select用来干嘛 ?如果是在查询分析器里,当然是要用select,因为要输出嘛,但是在sql语句中。。。
不需要啊。
记录一下。
Tags: sqlserver, mysql, convert
DataBase | 评论:0
| 阅读:15032
Submitted by gouki on 2012, March 20, 5:25 PM
Conn2.Open "Provider=SQLOLEDB.1;Persist Security InFso=true;Data Source=192.168.1.2;Initial Catalog=xxxxx;User ID=sa;Password=123456;"
一些参考信息:
Integrated Security默认值是False,此时需要提供Uid和Pwd,即将以Sql Server 用户身份登陆数据库;如果设置为True,Yes 或 SSPI,这不能出现Uid和Pwd,将以Windows用户省份登陆数据库。强烈推荐用后一种形式,安全性更高。
参见
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemDataSqlClientSqlConnectionClassConnectionStringTopic.asp
--------
http://expert.csdn.net/Expert/topic/2930/2930660.xml?temp=.423382
Persist Security Info 布尔类型,为True时,表明采用集成安全机制;若为False,则表明不采用集成安全机制。
更多资料还是看:http://connectionstrings.com/,还是这个网站好玩。
Tags: sqlserver
DataBase | 评论:0
| 阅读:15452
Submitted by gouki on 2012, January 14, 2:09 PM
众所周知,我们在插入数据库的时候,都是:insert into table (xxx) values('0');这种方式。
嗯,如果xxx是char或者varchar,并不会出错,但如果xxx是int型或者日期型,则可能会出错,也可能不出错,这是由您的配置决定的。
您可以看这里:
1.修改my.ini
XML/HTML代码
- ctrl+f 查找 sql-mode
-
- 将它值改为 "ANSI"
- sql-mode="ANSI";
- 重启数据库,就ok了.
2.动态修改数据库模式
XML/HTML代码
- 在启动数据库后,使用sql语句 SET sql_mode='ansi' ,
就ok了
--------------------------------------------------
第2个方法没用过.... T.T
手册地址在这.
http://doc.mysql.cn/mysql5/refman-5.1-zh.html-chapter/database-administration.html#server-sql-mode
sql-mode 是服务器模式
值的不同,mysql处理sql语句的方式也不同.
当值为ansi时,
mysql将更改sql语句的语法和行为,使其更符合标准SQL。
说白了,就是会修改错误.容错性高.
这样你给datetime项 和 int项 插入 空字符串,
mysql会将datetime的空字符改为 0000-00-00 00:00,
将int的空字符串改为0 .
其他值的作用.自己看手册.
-------上面这一段内容来自:http://ymx.iteye.com/blog/829046
是因为fireguns在询问的时候才想起要查这玩意,所以我就问了一下google
然后,firegus找到的资料是:
XML/HTML代码
- # Set the SQL mode to strict
- sql-mode=”STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”
-
- 改为:
-
- # Set the SQL mode to strict
- sql-mode=”NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”
手册上说的SQLMODE是指:
Tags: mysql, insert, int, datetime
DataBase | 评论:0
| 阅读:21796
Submitted by gouki on 2012, January 12, 9:28 AM
看到本文的时候,其实我还是很蛋定的,大约早在3年多前就看到有人这么做过了,当时还给我发了一大堆这样的代码。
其实还有例子,那就是当初在liba网的时候,有一段时间突然发现MYSQL超慢。bobby查询了所有的数据库查询,发现了类似本文的例子,那时候其实很惊讶,/*!xxxx*/这样的代码不是被注释了吗?又能用来干嘛 ?
所以,今天看到这一篇博客的时候,还是忍不住贴出来,因为这已经真的不算是秘密的秘密了。
来源:http://hi.baidu.com/isbx/blog/item/795dcc112b85f40eb8127b4d.html
作者:meao
昨天在检测一个外国PHP网站时
在id=255后加’出现forbidden
于是我and 1=1正常 and 1=2出错
说明肯定有注入
接着我order by猜出字段
然后union select 1,2,3,4 //悲剧的又出现了forbidden
肯定是做了过滤了
后来构造了语句id=-255+union+/*!select*/+1,2,3,4
原理:
MySQL Server supports some variants of C-style comments. These enable you to write code that includes MySQL extensions, but is still portable, by using comments of the following form:
/*! MySQL-specific code */
In this case, MySQL Server parses and executes the code within the comment as it would any other SQL statement, but other SQL servers will ignore the extensions. For example, MySQL Server recognizes the STRAIGHT_JOIN keyword in the following statement, but other servers will not:
SELECT /*! STRAIGHT_JOIN */ col1 FROM table1,table2 WHERE …
If you add a version number after the “!” character, the syntax within the comment is executed only if the MySQL version is greater than or equal to the specified version number. The TEMPORARY keyword in the following comment is executed only by servers from MySQL 3.23.02 or higher:
CREATE /*!32302 TEMPORARY */ TABLE t (a INT);
The comment syntax just described applies to how the mysqld server parses SQL statements. The mysql client program also performs some parsing of statements before sending them to the server. (It does this to determine statement boundaries within a multiple-statement input line.)
Tags: select, mysql
DataBase | 评论:0
| 阅读:17298
Submitted by gouki on 2011, December 28, 3:41 PM
我自己没注意过,但有人遇到了,就找找这方面的资料。
所以,纯转,有问题不要找我,http://bbs.zaopai.com/read-htm-tid-386.html:
max_allowed_packet用来限制mysql客户端和服务器通信数据包的长度的,mysql的默认限制1M。
所以,WIN32的, 请在你的系统目录下查找my.ini
在Linux下你查找my.cnf
在里面加入
set-variable = max_allowed_packet=6M
set-variable = net_buffer_length=4K
=========================
mysql有一个max_allowed_packet变量,可以控制其通信缓冲区的最大长度。要想为mysql将max_allowed_packet变量的值设置为16MB,使用下面的任何一个命令:
shell> mysql --max_allowed_packet=16777216shell> mysql --max_allowed_packet=16M第1个命令以字节指定值。第2个命令以兆字节指定值。变量值可以有一个后缀K、M或者G(可以为大写或 小写)来表示千字节、兆字节或者十亿字节的单位。
在选项文件中,变量设定值没有引导破折号:
[mysql]max_allowed_packet=16777216或:
[mysql]max_allowed_packet=16M
注:max_allowed_packet参数是在mysql4以后才有的,在mysql4以前版本,还没有这个参数
Tags: mysql
DataBase | 评论:0
| 阅读:19115