[转帖]mysql 中 sql_mode 的讲解_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
2
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 1961 | 回复: 1   主题: [转帖]mysql 中 sql_mode 的讲解        下一篇 
esentest
注册用户
等级:新兵
经验:66
发帖:8
精华:0
注册:2014-2-26
状态:离线
发送短消息息给esentest 加好友    发送短消息息给esentest 发消息
发表于: IP:您无权察看 2015-2-4 17:56:21 | [全部帖] [楼主帖] 楼主

mysql5添加了一些新的功能的规则,其中对开源程序影响比较大的有两个,一个是4.0.12+开始的4层次字符集,一个是5.0.18开始的默认strict

mode。


对于这两个问题,效率最好的解决方案,就是直接修改my.ini

# The default character set that will be used when a new schema or table is
# created and no character set is defined
default-character-set=utf8
#这里改成utf-8
# Set the SQL mode to strict
sql-mode="STRICT_TRANS_TABLES, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION"
#这里改成=""


当你没有权限进行修改时,就只好在程序中判断了mysql5 新功能,必须在每次连接上数据库时进行设定。在使用了数据库抽象层的程序中修改起

来也很简单:

if(mysql_get_server_info( $connect ) > '4.0.1')
{
      mysql_query( "set names 'utf8'" , $connect );
}
if(mysql_get_server_info( $connect ) > '5.0.1')
{
      mysql_query("SET sql_mode=''" , $connect );
}


--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
yihe
注册用户
等级:上士
经验:296
发帖:1
精华:0
注册:2015-1-29
状态:离线
发送短消息息给yihe 加好友    发送短消息息给yihe 发消息
发表于: IP:您无权察看 2015-2-4 22:25:05 | [全部帖] [楼主帖] 2  楼

sql_mode="",即强制不设定MySql模式(如不作输入检测、错误提示、语法模式检查等)应该能提高性能,但有如下问题:

如果插入了不合适数据(错误类型或超常),mysql会将数据设为“最好的可能数据”而不报错,如:

/数字 设为:0/可能最小值/可能最大值

/字符串 设为:空串/能够存储的最大容量字符串

/表达式 设为:返回一个可用值(1/0-null)

所以,解决办法是:所有列都要采用默认值,这对性能也好。



赞(0)    操作        顶端 
总帖数
2
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论