CensOS 7加上mariaDB出现了套接字错误和日本语文字乱码

我开始安装MariaDB,并为了能够轻松玩耍而记录下我输入的命令和遇到的错误。最终我遇到的问题有两点,正如标题所述。

环境

    • Windows 8.1

 

    • VirtualBox 5.0.28

 

    • Vagrant 1.8.1

 

    CentOS 7.0

在虚拟环境中,使用Windows 8.1 + Cygwin + Vagrant安装了CentOS 7.0,并安装了PHP 7.

这篇文章的内容

mariaDB インストール&接続

socket エラー

直打ちで DB 操作

日本語が「?」になる
デフォルト書き換え or データベース個別設定

安装并连接 mariaDB。

[root@localhost /]# yum install mariadb mariadb-server
Complete!

套接字错误

[root@localhost /]# mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

( ゚д゚)可以用中文表达成:(●ロ●)

MySQL的套接字错误解决方法 – 好康好康,给点儿吧。
(2009年的博客竟然有截至到2015年的感谢评论,感觉很不错)

[root@localhost /]# cat /var/lib/mysql/mysql.sock         # このファイルあるのか
cat: /var/lib/mysql/mysql.sock: No such file or directory # 無い
[root@localhost /]# touch /var/lib/mysql/mysql.sock       # つくっちゃえ(空ファイル)
[root@localhost /]# mysql                                 # 途中だけど試しに
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)

这次只需要稍微注意一下重新启动吗?这次是mariadb。

[root@localhost /]# chown mysql:mysql /var/lib/mysql      # 所有者変更
[root@localhost /]# ls -l /var/lib/mysql/                 # 所有者確認
drwx------ 2 mysql mysql     4096 Nov 27 12:17 mysql      # mysqlさんちのmysqlさんのものになった
[root@localhost /]# systemctl restart mariadb             # 再起動
[root@localhost /]# mysql
Welcome to the MariaDB monitor.                           # やったー

在途中,错误的结束号码从2变成了111。
由于无法在谷歌上找到确切答案,所以后来的某一天 φ(。。)

使用直接的方式进行数据库操作

不考虑设置用户密码,直接通过命令输入数据。
在数据库zoo中创建名为animals的表,并准备id(自动编号)和name两个列。
(由于SQL语句容易出错,我顺便写一下。)

MariaDB [(none)]> CREATE DATABASE zoo;
MariaDB [(none)]> USE zoo;
Database changed
MariaDB [(zoo)]> CREATE TABLE animals (
    -> id int auto_increment,
    -> name varchar(255),
    -> PRIMARY KEY (id)
    ->);
MariaDB [(zoo)]> SHOW COLUMNS FROM animals;
+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| id    | int(11)      | NO   | PRI | NULL    | auto_increment |
| name  | varchar(255) | YES  |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+

随便放几只猫进来试试看。

MariaDB [zoo]> INSERT INTO animals (name) VALUES ('とびみけさん'), ('shironeko-san');
Query OK, 2 row affected, 1 warning (0.00 sec)
MariaDB [zoo]> SELECT * FROM animals;
+----+---------------+
| id | name          |
+----+---------------+
|  1 | ??????        |
|  2 | shironeko-san |
+----+---------------+

鳅鱼先生……

日语会变成「?」吗?

将mysql的字符编码设置为utf8。
解决MariaDB中的日语乱码问题。

听说数据库的字符编码被设置为 Latin-1 是有问题的。

MariaDB [(zoo)]> SHOW variables LIKE "chara%"; # 出力は一部抜粋
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_database   | latin1                     |
| character_set_server     | utf8                       |
+--------------------------+----------------------------+

1. 首先,好像要更改mariaDB的默认设置。
2. 如果想要创建一个新的数据库,好像是一个不错的选择。如果想要保留现有的数据库的话,
1. 可以尝试更改现有数据库的设置。
2. 或者新建一个表(?)的感觉。如果重新创建表的话,可能就不需要过于在意现有的数据库了吧?

从更改mariaDB的字符编码设置的方法中。
退出mariaDB并进行编辑/etc/my.cnf一次。

MariaDB [zoo]> exit
Bye
[root@localhost /]# vim /etc/my.cnf

在此添加。

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
character-set-server=utf8  # ここ

[client]                   # ここ
default-character-set=utf8 # ここ

重新启动并重新进入。
确认字符编码后,确实是UTF-8。

MariaDB [none]> SHOW variables LIKE "chara%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_database   | utf8                       |
+--------------------------+----------------------------+

注意:现有数据库表的设置仍保持为Latin-1

由于更改的只是默认设置,所以已经创建的内容不会改变。

MariaDB [none]> USE zoo                    # my.cnf 編集前に作ったデータベース
MariaDB [zoo]> SHOW variables LIKE "chara%"; 
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_database   | latin1                     |
+--------------------------+----------------------------+
MariaDB [zoo]> CREATE DATABASE zoo_2;
MariaDB [zoo]> USE zoo_2                   # my.cnf 編集後に作ったデータベース
MariaDB [zoo_2]> SHOW variables LIKE "chara%"; 
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_database   | utf8                       |
+--------------------------+----------------------------+

在这个 zoo_2 中创建一个新的表格并插入日语,则能够成功显示。太棒了。
要更改现有数据库的设置,请看下方↓。

单独更改配置

要更改数据库zoo的字符编码,可以按照以下步骤进行。

MariaDB [zoo]> ALTER DATABASE zoo default charset=utf8;

↓ 跟以前不一样了。

MariaDB [zoo]> SHOW variables LIKE "chara%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_database   | utf8                       |
+--------------------------+----------------------------+

然而,发生变化的只是 zoo 的默认设置(可能是这样),
现有的表仍然保持为 Latin-1 编码。
与上述注意事项相同,新建的表使用了 UTF-8 编码。

# テーブル animals はやっぱりだめ
MariaDB [zoo]> INSERT INTO animals (name) VALUES ('みけさん');
MariaDB [zoo]> SELECT * FROM animals;
+----+---------------+
| id | name          |
+----+---------------+
|  1 | ??????        |
|  2 | shironeko-san |
|  3 | ????          |
+----+---------------+
# テーブル animals_2 を作ってみたらいけた(CREATE TABLE コマンドは略)
MariaDB [zoo]> INSERT INTO animals_2 (name) VALUES ('みけさん');
MariaDB [zoo]> SELECT * FROM animals_2;
+----+--------------+
| id | name         |
+----+--------------+
|  1 | みけさん     |
+----+--------------+

在我贴的链接文章中写道,即使是现有的表格,也可以通过 ALTER TABLE 语句进行更改。但是我尝试了一下,结果并没有改变。为什么呢?

暂时结束

应该在数据库niwasaki中创建一个名为nekosan的表。
由于更改名称很麻烦,因此请谨慎选择数据库名称。

广告
将在 10 秒后关闭
bannerAds