mysql5.7.16 Windows与Ubuntu的安装、导入数据与编码乱码问题。

来源:互联网 发布:打印纸品牌 知乎 编辑:程序博客网 时间:2024/05/18 20:35

mysql每个版本在安装、设置上都会有一定的差异。这次在安装使用5.7.16版本的时候,遇到了一些小问题,和网上现有的一些解决方法有差异。

安装:

windows上建议下载msi包进行安装:
官网下载图

Ubuntu建议添加APT源进行安装。
http://dev.mysql.com/downloads/repo/apt/
官方还提供了官方源的deb安装包,安装之后直接执行:

sudo apt-get updatesudo apt-get install mysql-server

即可安装。
注意安装过程均需要设置root账户的密码。其他安装过程与设置与网上的相关教程无异。

导入数据:

导入数据一般有两个命令:load data与mysqlimport。mysqlimport仅能在命令行下运行。示例如下:

mysqlimport  --ignore-lines=1 --fields-terminated-by=, --columns='ID,Name,Phone,Address' --local -u root -p Database /path/to/csvfile/TableName.csv

导入以逗号分割的csv文件,将其导入到数据库Database中的TableName表,并忽略第一行。文件名与数据库的表明必须一致,否则会发生错误。在导入前,应该在数据中先create table TableName

load data命令在mysql中运行,默认只能导入位于mysql认为安全的目录中的文件。默认为

C:\ProgramData\MySQL\MySQL Server 5.7\Uploads

网上的方法是修改C:\ProgramData\MySQL\MySQL Server 5.7\my.ini 文件中的secure-file-priv=’C:/ProgramData/MySQL/MySQL Server 5.7/Uploads’ 语句,将其注释掉或者删除。但在mysql5.7版本中,这会导致load data彻底无法运行。
运行命令:

show variables like 'secure%';

如果注释掉该语句,其值显示为NULL,load data无法从任何文件夹中导入数据。正确做法应该讲语句改为:

secure-file-priv=”

即删除但引导中的内容。再次运行以上命令,发现值变为空:

+——————+——-+
| Variable_name | Value |
+——————+——-+
| secure_auth | ON |
| secure_file_priv | |
+——————+——-+

此时load data命令便可从任何目录中导入数据。以下为示例:

load data local infile 'C:\\Users\\XXX\\Documents\\data\\test.csv' into table test fields terminated by ',' OPTIONALLY ENCLOSED BY '"' lines terminated by '\r\n' ignore 1 lines;

导入test.csv文件到test数据表中,csv文件已逗号分隔,每个数据都有双引号,忽略第一行。

编码乱码:

对中文用户来讲,导入数据的过程中就会涉及到一个永恒的问题,编码与乱码。
在Windows下,mysql5.7.16版本默认使用了UTF-8编码,在导入txt、csv数据的时候只需要注意将原数据的编码改成UTF-8即可。当然也可以在建立数据库是指定collate为gbk,但为了通用,建议使用UTF-8编码。

create database test_gbk collate 'gbk_chinese_ci';

以下为ubuntu设置


在ubuntu下,mysql5.7.16的默认编码设置很是诡异。默认配置下导入UTF-8编码的txt、csv文件均会出现乱码问题。网上搜索之后,才发现mysql数据库的默认编码竟然不是UTF-8

show variables like 'char%';

得到如下结果。character_set_database的值为latin1。

+————————–+—————————-+
| Variable_name | Value |
+————————–+—————————-+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+————————–+—————————-+

解决这一问题有两个思路,一个就是在创建数据库和数据表的时候指明collate的值:

create database test collate 'utf8_general_ci';

另一种方法则是修改mysql的配置文件。需要注意的是,老版本的mysql中,其配置文件的路径为:

/etc/mysql/my.cnf

在mysql5.7.16中,以上文件成为一个链接文件,根据里面的内容,可以判断其实际的配置文件路径为:

/etc/mysql/conf.d/mysql.cnf

在以上文件中添加:

[mysql]
default-character-set=utf8
[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8

重启mysql服务:

service mysql stopservice mysql star

再次进入mysql运行

show variables like 'char%';

得到:

+————————–+—————————-+
| 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/ |
+————————–+—————————-+

则显示成功。
此时导入UTF-8的文档就不会再出现乱码。

0 0
原创粉丝点击