业务开发(一)—— MySQL

0x01、SQL异常Incorrect string value

java.sql.SQLException: Incorrect string value: 'xE6x88x91xE7x9Ax84...' for column 'groupName'
修改数据库表的编码以及表中字段的编码,改为utf-8

0x02、mysql,获取当前时间几小时或几天之前的时间

select date_sub(now(), interval 1 hour);

0x03、Data truncation: Truncated incorrect DOUBLE value

com.mysql.jdbc.MysqlDataTruncation: Data truncation: Truncated incorrect DOUBLE value:
 
update user set pay_password = #{payPassword},salt = #{salt} where id = #{id}

update设置的值之间用,而不是and

0x04、数据库满了或者连接拒绝

重启本地数据库服务器或者找方法解决数据库满了的问题

0x05、没有合适的驱动

 java.sql.SQLException: No suitable driver found for jdbc:mysql:

0x06、数据库查询缓慢

之前修改过一个表,它原先的思路是先在一个表中选出20条记录,然后再与多个表进行联表查询,而我改完之后呢,是将第一个表中所有记录都和多个表联表查询完之后,再选出20条记录,最后因为第一个表有上万条数据,查询一次都要两分多钟。
所以联表查询时,一定要缩小表的范围,让小表来联大表。

0x07、Column 'rule_id' in field list is ambiguous

例如两个表中都有rule_id这个字段,你指定rule_id的时候,必须指明a表还是表rule_id

0x08、权限问题

显示当前用户权限

mysql> show grants;

给某个用户权限

grant select,insert,update,delete,create,drop on `management`.* to 'xxxx'@'%';

0x09、使用show grants命令显示有创建修改表的权限,而在navcat上报 ERROR1005、1060错误

原因是/mnt/data/mysql文件夹的权限没有设置。

0x10、1040 Too many connections

find / -name my.cnf 或 cd /etc/my.cnf
将最大连接数增大,由500改为5000然后重启mysql,解决问题
max_connections=500
service mysqld restart

0x11、在navcat上修改表的id为自增,但使用插入语句还是会提示id没有默认值

field id doesnt have a default value

解决方法:在navcat上改变了表的字段或者结构,需要点击保存,否则不能生效。

0x12、SQL语句错误,提示:"#1241 - Operand should contain 1 column(s)"错误

                select a.id from
		(
			select * from user where nickname is not null and head_image_url is not null
		)a
		join weixin_user b
		on a.id = b.user_id
		where a.id
		not in(
		select * from coupon_record a
		join coupon b
		on a.coupon_id = b.id
		where send_type = 2)

将select * from coupon_record a中的*改为id

0x13、Got error 28 from storage engine

数据库出现这个提示,表示mysql的磁盘满了。运行tomcat时可能会出现,控制台日志卡在一个mysql查询记录上。
解决方法就是清理磁盘。

0x14、Every derived table must have its own alias

select * from (
	(
	select rule_id,rule_name,owner_id,category_id,average_score,downloads from rule_details 
	where owner_id = 'xxxxx' 
	order by RAND() desc limit 12)
	union
	(
	select rule_id,rule_name,owner_id,category_id,average_score,downloads from rule_details 
	where category_id = (select category_id from rule_details where rule_id = 'xxxxx')
	and rule_id <> 'xxxxxx'
	order by RAND() desc limit 12)

每个派生出来的表都必须有一个自己的别名
改成


	(
	    select rule_id,rule_name,owner_id,category_id,average_score,downloads from rule_details 
	    where owner_id = 'xxxxx' 
	    order by RAND() desc limit 12  
        )
	union
	(
	    select rule_id,rule_name,owner_id,category_id,average_score,downloads from rule_details 
	    where category_id = (select category_id from rule_details where rule_id = 'xxxxx')
	    and rule_id <> 'xxxxxx'
	    order by RAND() desc limit 12
        )

0x15、显示没有数据库的驱动,启动数据库服务

重启mysql服务

/etc/init.d/mysqld stop
/etc/init.d/mysqld start

0x16、按权重排序

1.select * from tbl_actor order by (follower_count+Recommend_weight)*weight_ratio desc limit 3;

2.order by (follower_count+Recommend_weight)*weight_ratio

3.可用于根据权值,做推荐列表用。

1、同样的登录代码,我这边可以正常登录,同事那边不断重定向,无法登陆成功

原因是,shiro的账号权限设置,如果账号未激活,会循环重定向。

        <mvc:interceptors>
		<mvc:interceptor>
			<mvc:exclude-mapping path="/Manage/"/>
		</mvc:interceptor>
	</mvc:interceptors>

2、Controller层以JSON的形式返回一个List对象,如果这个对象是null,前端则接收不到。

解决方法

return list == null ? new ArrayList<Object>() : list;

9 You can't perform any operations on this connection. It has been automatically closed by Proxool for some reason

跟数据库服务器的配置有关,一般重启几次就好,尤其是如果一个函数有加事务,你在调试的过程中很容易出现这个报错。

10 修改xml文件,不管怎么修改,在服务器上得到的结果都是不对的

原因很可能是所做的修改没有生效,在服务器上修改xml文件,必须重启才能生效。

14 发送验证码不能发送成功,返回100001,(云之讯)

解决方法:根据已有的信息去查100001所代表的意思,http://docs.ucpaas.com/doku.php?id=rest_error,
原因是账户的余额不足,所以不能发送短信。

15 控制台提示找不到类

1、maven install 一下
2、很可能是配置文件的路径不对,比如说xml中类的路径。

原文地址:https://www.cnblogs.com/fonxian/p/5662665.html