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的表。
由于更改名称很麻烦,因此请谨慎选择数据库名称。