zoukankan      html  css  js  c++  java
  • MySQL编码不一致导致查询结果为空

    升级数据库后(5.1到8.0),发现一个奇怪的问题,某些页面在升级前可以正常查询,但升级后什么也查不出来了,有时候还会查出错误的结果。经过一整天的排查,终于发现由两个原因导致,现记录如下。

    第一是数据库的编码。使用中文关键字查不出结果(或结果错误),但是英文关键字可以正常查询。

    还原数据库后默认的编码不是utf-8。执行下面命令可以查看当前数据库编码。

    show variables like 'collation%';

    或者

    show variables like '%character%';

    修改编码的语句

    set character_set_client=utf8
    set character_set_connection=utf8
    set character_set_database=utf8
    set character_set_results=utf8
    set character_set_server=utf8

    但是重启MySQL服务后,再查看数据库的编码,发现又变回了原来的。

    原来使用命令行设置只是在当前会话中有效,当重启数据库后就会恢复默认编码。因此应该在MySQL的配置文件my.ini中设置。

    低版本MySQL的my.ini在安装路径下可以找到,但是8.0的版本存放在C:ProgramDataMySQLMySQL Server 8.0下,这是一个隐藏的文件夹

    打开my.ini后,加入如下配置

    [mysql]
    default-character-set=utf8
    [mysqld]
    character_set_server=utf8 
    collation_server=utf8_general_ci 

    修改后重启MySQL服务,发现编码已经成功修改

    第二种原因是因为新版本MySQL的关键字导致

    数据库的表中有个字段为virtual,在8.0中是虚拟列的关键字。

    因此要在查询中加上``避免和关键字重复

    其他的关键字Name、Class等没有问题。

  • 相关阅读:
    EL表达式
    JavaBean知识
    设计模型MVC和JavaBean
    JSP知识
    会话技术
    Servlet知识
    selenium+maven+testng+IDEA+git+jenkins自动化测试环境搭建(三)
    selenium+maven+testng+IDEA+git自动化测试环境搭建(二)
    selenium+testng+testng-xslt-1.1.2之报告完善
    selenium入门环境之浏览器问题
  • 原文地址:https://www.cnblogs.com/yaotome/p/10622986.html
Copyright © 2011-2022 走看看