diff --git a/windows.md b/windows.md index 3440fbf9a46fdf5ba5e67126fe4b1b932fd19965..7666b8fd03fbfc4c012464a3ef305b027a244bf6 100644 --- a/windows.md +++ b/windows.md @@ -1,30 +1,16 @@ +## 如何解决php从myql读取数据中文变成问号问题 +### 问题分析 +导致变成中文变问号的原因在于此时mysql.5.6默认字符集是latin1,而我们的php对代码的解析为utf8。这就像两个人对话一样,对方和我们说的是英语,但是我们却把它当成的中文来听,所以听不懂就是再正常不对的事情了。 - **如何解决php从myql读取数据中文变成问号问题。** +为了解决这个默认为latin1的问题,其实在[docker\mysql5.6\custom.cnf](docker\mysql5.6\custom.cnf)中是进行了把默认字符改成utf8的改写。 - 导致变成中文变问号的原因就是mysql.5.6默认字符集是latial, - 这个时候我们只有把latial字符集更改为utf8字符集就能解决。 +同时由于在windows中的权限默认为 `全局可写` ,这直接导致了mysql这个docker容器认为我们改写的custom.cnf并不安全,所以mysql直接忽略了custom.cnf这个配置文件,当然也同步忽略了我们在其设置的将默认字符编码变更为utf8的设置。 +### 将[docker\mysql5.6\custom.cnf](docker\mysql5.6\custom.cnf)设置为只读 +打开 `docker\mysql5.6` 文件夹,在 `custom.cnf` 点右键 -> 属性 -> 只读 - **1. 删除data文件夹(这个不删除应该也可以,不影响 PHP 查看)**
- custom.cnf和data都在docker/mysql.5.6目录下。
- - [mysqld] - character-set-server = utf8 - collation-server = utf8_unicode_ci - skip-character-set-client-handshake - character_set_server = utf8 - collation_server = utf8_unicode_ci - skip_character_set_client_handshake - max_allowed_packet = 100M +### 重启(启动)docker容器 +如果你当前已经启动了docker容器,那么需要先执行`docker compose down`来停止原容器。 - **2. 将文件custom.cnf的属性变为只读(找到docker/mysql.5.6目录下的custom.cnf右键打开属性勾选只读按钮)** - - 为什么要改变成可读,不设置可读的话会更改不了操作 - 会报出错误Warning: World-writable config file '/etc/mysql/my.cnf' is ignored‘/etc/my.cnf’ is ignored 。 - 就会导致字符集无法更改大概意思是权限全局可写,任何一个用户都可以写。mysql担心这种文件被其他用户恶意更改, - 所以忽略掉这个配置文件。导致无法进入,这也是mysql的安全机制之一。所以我们必须得改一些权限。设置其他用户 - 不可写。 - - **3. 重启docker容器**
- docker-composer up -d \ No newline at end of file +接下来我们启动容器即可。 \ No newline at end of file