美文网首页
数据库1055错误

数据库1055错误

作者: Get_Wind | 来源:发表于2021-12-14 18:08 被阅读0次

    数据库1055错误

    问题描述:在MySQL数据库下,执行SQL插入语句报错或者进入数据库时。出现1055错误信息。 错误原因:在MySQL5.7之后,sql_mode中默认存在ONLY_FULL_GROUP_BY,SQL语句未通过ONLY_FULL_GROUP_BY语义检查所以报错。 ONLY_FULL_GROUP_BY:ONLY_FULL_GROUP_BY要求select语句中查询出来的列必须是明确的(其他语句也是一样)。 以SQL语句select columes from table group by list为例:columns必须是聚集函数或者在group by后的表达式list中,并且list中必须包含主键,否则也会报错。     insert、update、delete语句都会报错(但不影响SQL语句的执行),因为这三种语句执行之前也会执行查询操作。

    以主键为id的表为例: SELECT count(1) FROM customer GROUP BY name;该SQL执行成功,因为count是聚集函数; SELECT * FROM customer GROUP BY name;该SQL执行失败,因为*中包含主键id,而group by后的表达式中并没有包含id SELECT name FROM customer GROUP BY name;该SQL执行成功,因为name包含在group by后的表达式中 SELECT name, contact FROM customer GROUP BY name;该SQL执行失败,因为contact没有包含在group by后的表达式中

    解决方案: 一、永久解决

    1)在MySQL下执行SELECT @@sql_mode语句  2)将查询结果中的ONLY_FULL_GROUP_BY去掉然后复制,打开MySQL的配置文件,将sql_mode的值设置为复制的值(若没有sql_mode在[mysqld]下方添加一行即可)。 MySQL配置文件所在位置:安装版可通过windows服务所对应mysql启动项,查看其对应属性->可执行文件路径,获取my.ini路径。 免安装版一般在其根目录下。(默认是my-default.ini,必须将名字改为my.ini才能生效)  sql_mode=…(删掉ONLY_FULL_GROUP_BY的那段) 3)重新MySQL服务即可生效!

        详见:https://www.cnblogs.com/haoyul/p/9882853.html

    如果没有找到my.ini配置文件

    新建my.ini配置文件

    有些时候需要设置mysql的属性,一般的可以通过以下方式找到my.ini文件的路径

    mysql>showvariableslike'datadir';

    +---------------+--------------------------------------------+

    |Variable_name|Value|

    +---------------+--------------------------------------------+

    |datadir|C:\ProgramData\MySQL\MySQLServer8.0\|

    +---------------+--------------------------------------------+

    1rowinset (0.03sec)

    1234567

    执行结果就是配置文件的路径

    :可以通过select @@basedir; 获取到mysql的安装路径

    但是笔者的mysql有点傲娇,不太一样:

    mysql>showvariableslike'datadir';

    +---------------+--------------------------------------------+

    |Variable_name|Value|

    +---------------+--------------------------------------------+

    |datadir|C:\install\mysql\mysql-8.0.16-winx64\data\|

    +---------------+--------------------------------------------+

    1rowinset (0.03sec)

    1234567

    并且该目录下根本就没有my.ini配置文件。。。。。

    嘿嘿~~ 那就新建一个!

    比如在这里新建一个空的my.ini:

    C:\install\mysql\mysql-8.0.16-winx64\my.ini

    1

    内容可以copy一份这里的:

    #Foradviceonhowtochangesettingspleasesee

    #http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html

    #***DONOTEDITTHISFILE.It's a template which will be copied to the

    #***defaultlocationduringinstall,andwillbereplacedifyou

    #***upgradetoanewerversionofMySQL.

    [client]

    default-character-set=utf8mb4

    [mysql]

    default-character-set=utf8mb4

    [mysqld]

    character-set-client-handshake=FALSE

    character-set-server=utf8mb4

    collation-server=utf8mb4_bin

    init_connect='SET NAMES utf8mb4'

    #Removeleading#andsettotheamountofRAMforthemostimportantdata

    #cacheinMySQL.Startat70%oftotalRAMfordedicatedserver,else10%.

    innodb_buffer_pool_size=128M

    #Removeleading#toturnonaveryimportantdataintegrityoption:logging

    #changestothebinarylogbetweenbackups.

    #log_bin

    #Thesearecommonlyset,removethe#andsetasrequired.

    basedir=D:\MySQL

    datadir=D:\MySQL\data

    port=3306

    #server_id= .....

    #Removeleading#tosetoptionsmainlyusefulforreportingservers.

    #TheserverdefaultsarefasterfortransactionsandfastSELECTs.

    #Adjustsizesasneeded,experimenttofindtheoptimalvalues.

    join_buffer_size=128M

    sort_buffer_size=16M

    read_rnd_buffer_size=16M

    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

    1234567891011121314151617181920212223242526272829303132

    或者只加入自己想要的配置,例如:

    [mysqld]

    ft_min_word_len=1

    12

    然后打开cmd,进入命令行,输入:

    mysqld--defaults-file="C:\install\mysql\mysql-8.0.16-winx64\my.ini"

    123

    即修改mysql的配置文件路径,嘿嘿 _

    重启mysql服务即可,查看是否生效,可以执行类似的命令:

    mysql>showvariableslike'%ft%';

    +---------------------------------+----------------+

    |Variable_name|Value|

    +---------------------------------+----------------+

    |ft_boolean_syntax|+-><()~*:""&||

    |ft_min_word_len|1|

    +---------------------------------+----------------+

    17rowsinset (0.03sec)

    123456789

    如果还没有安装mysql服务,那更加好,只需要在安装的时候输入即可:

    mysqld--install"MySql80"--defaults-file="C:\install\mysql\mysql-8.0.16-winx64\my.ini"

    每一篇博文都是学习所用,大部分都是网上摘录的,在此谢谢那些大佬的博文帮助,非常感谢!!!

    相关文章

      网友评论

          本文标题:数据库1055错误

          本文链接:https://www.haomeiwen.com/subject/hmlyfrtx.html