MySql顽疾解读

一、默认编码集问题mysql

在作前台数据展现的时候,查询所有select * from t_news能够查到全部内容。而后参数化查询的时候就不行。好比:linux

Select * from t_news where title like ‘%源代码教育%’;查到0条数据。spring

Select * from t_news where id = 1。 查询到1条数据。sql

注意标红字段,这是我修改以后的,原来都是latin1。数据库

解决办法:编程

Windows下MySQL的配置文件是my.ini,通常会在安装目录的根目录。服务器

Linux下MySQL的配置文件是my.cnf,通常会放在/etc/my.cnf,/etc/mysql/my.cnf。若是找不到,能够用find命令查找。函数

打开my.ini/my.cnf修改如下两个字段。工具

Ps:修改配置文件事后须要重启mysql。测试

二、数据不回滚

在编程的时候,spring配置了事务,但出现异常时候数据库的数据依然改变。在确认事务和代码配置没有问题的状况下,咱们把可能性专项数据库。咱们使用”Navicat”工具设计表,在”选项”一栏中咱们发现表使用的存储引擎是MyISAM。

MyISAM不支持事务,回滚将形成不彻底回滚,不具备原子性。

将MyISAM改成InnoDB。

一样在MySQL的配置文件(my.ini)中有默认的存储引擎。在建立表的时候若没有特别声明,将使用默认的存储引擎。

三、优化导入大量数据

在工做中咱们不免会遇到数据的大量导入的状况。好比须要查询之前备份的数据,将真实数据导入到本地作测试,按期将数据导入到备份数据库等等业务场景。

MySQL提供了load data infile的导入方式。可是配置不恰当一样会致使导入速度不快。

解决方案:

将后面的参数值调大,通常为物理内存的百分之80%。可是32位系统会被限制为2-3.5G。

四、开启自定义函数功能(云数据库)

有时候咱们运行别人的代码,或者移植服务器的时候可能会遇到数据库之前定义的函数不能使用的状况。尤为是与数据库,默认是没有开启函数功能,致使函数不执行。

首先咱们查看函数功能是否开启。以下图:

这里自定义函数功能默认是关闭状态。

解决方案:使用”set global log_bin_trust_function_creators = 1;”开启自定义函数功能。

再次查询:

可是这种方式只是一个零时解决方案,在MySQL重启之后,功能又会默认关闭。

要永久开启自定义函数功能,须要在配置文件中加入”log-bin-trust-function-creators=1”。

五、linux环境下表名大小写问题

在linux系统环境下,MySQL表名默认区分大小写。有时候表名中若输错一个大写字母而致使查询不出来的状况。

解决办法:在my.cnf配置文件最后添加”lower_case_table_names=1”。而后重启MySQL。

“lower_case_table_names=1        ”这句话的意思是将输入语句强制转换为小写,再执行语句。

相关文章
相关标签/搜索