3

我有 PHP 5.5.9 和 MySQL 5.5.43 Innodb。这是在 Kubuntu LTS /etc/mysql/my.cnf

printf("当前字符集:%s\n", mysqli_character_set_name($conn));

当前字符集:latin1

我试过了

默认字符集 = utf8

首先但后来我的mysql服务器没有重新启动

然后我试过了

字符集服务器 = utf8

然后我的 mysql shell 没有启动

我该如何挽救这个问题?我已经使用 init_connect = 'SET NAMES utf8' 解决了非root用户的问题,但字符集保持不变(它只显示为非特权用户UTF8,它仍然是Latin1)。

如果(一个很大的如果)smnd 可以告诉我应该在哪里使用 utf8mb4?也在 my.cnf 文件中?我有我的表在 utf8 中,并将我正在使用的那些迁移到 utf8mb4 ...

另一个问:是否适用于 Linux (Kubuntu) 服务器: https ://www.youtube.com/watch?v=3M1Wpw4uOoM

请帮助我,谢谢,来自 lilaum.com 的 Gregor

4

2 回答 2

3

mysqli_set_charset('utf8').

init_connect连接被忽略root

utf8mb4实际上是 的超集utf8。中文和新的表情符号需要它,加上一些晦涩的字符集。

于 2015-07-11T01:02:09.540 回答
2

PHP手册说:

MySQLnd 总是假定服务器默认字符集。此字符集在连接握手/身份验证期间发送,mysqlnd 将使用该字符集。

MySQLnd 是 PHP 5.4 及更高版本中包含的 MySQL 本机驱动程序。

不幸的是,即使在我的系统中(Debian Jessie 8.3 上的 PHP 5.6.17 和 MySQL 5.5.47),我也必须确认,尽管已经使用以下条目配置了 /etc/mysql/my.cnf

[mysqld]
character-set-server=utf8

[mysql]
default-character-set=utf8

mysqlnd 似乎没有假定服务器默认字符集(utf8),而是使用 collat​​e latin1_swedish 将连接字符集设置为latin1 考虑到 MySQL AB 是一家瑞典公司,这可能是一个默认值)。

因此,从 PHP 应用程序连接时,似乎没有永久设置utf8字符集的方法。你必须打电话

$mysqli->set_charset("utf8")

每次连接后。这可以嵌入到自定义的“dbconnect”PHP 函数中,以提供一种抽象层。

于 2016-03-28T22:06:17.940 回答