Linux环境下Mysql中文字符编码问题

Linux环境下Mysql中文字符编码问题

  1. 字符编码会引发的问题(仅限个人理解,从个人实际经历总结得出,并不仅限于此些问题):
    (1)导入含有非默认编码所支持的数据库文件失败(如:默认编码为latin1,导入含有中文字符的文件会报错,无法导入,本人亲身经历了DataGrip导入txt文件到数据库中失败)
    (2)SQL嵌入到高级语言中访问数据库时,查询/其他类型语句含有非默认编码所支持的字符返回结果异常(如:默认编码为latin1,嵌入式SQL含有中文字符时,返回到Java的ResultSet中的记录为空)
  2. 修改默认编码方法:修改Linux下的Mysql配置文件my.cnf(等同于windows下的my.ini);
    (1)本人在查阅多个CSDN博客后,发现大多数博客给出的答案是my.cnf所在位置为/etc/my.cnf,本人用which mysqld 查询到mysqld的路径为/usr/sbin/mysqld
    (2)然后用命令sudo /usr/sbin/mysqld --verbose --help |grep -A 1 'Default options’查找到my.cnf的路径信息:/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf
    (3)进入到/etc/my.cnf和/ect/mysql/my.cnf都不是mysql的配置文件信息,/etc/my.cnf为空,/etc/mysql/my.cnf中只包含
    !includedir /etc/mysql/conf.d/
    !includedir /etc/mysql/mysql.conf.d/
    这两句信息,在多次查找后才找到对应的配置文件信息,修改配置文件:vim /etc/mysql/mysql.conf.d/mysqld.cnf
    (4)在文件末尾加入
    [mysqld]
    character-set-server=utf8
    collation-server=utf8_general_ci
    [client]
    default-character-set=utf8
    保存退出
    (5)重启Mysql:sudo /etc/init.d/mysql restart或者 service mysql restart
    则Mysql中
    ±-------------------------±---------------------------+
    | Variable_name | Value |
    ±-------------------------±---------------------------+
    | character_set_client | utf8 |
    | character_set_connection | utf8 |
    | character_set_database | utf8 |
    | character_set_filesystem | binary |
    | character_set_results | utf8 |
    | character_set_server | utf8 |
    | character_set_system | utf8 |
    | character_sets_dir | /usr/share/mysql/charsets/ |
    ±-------------------------±---------------------------+
    默认编码已被修改(上述表可在数据库中:show variables like “%char%”;查看)

3.若修改数据库的默认编码后数据库内的database仍无法显示,则使用: alter database 数据库名 character set utf8;修改database的编码
4. (仅限使用JDBC连接数据)上述1所提到的问题(2)可通过在URL加入默认编码快速解决问题:
URL = “jdbc:mysql://localhost:3306/company?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8”;

你可能感兴趣的:(Linux环境下Mysql中文字符编码问题)