mysql将默认字符集latin1更改为utf8

时间:2015-07-10 18:47:27

标签: mysql utf-8 character-encoding my.cnf utf8mb4

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

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

当前字符集:latin1

我试过

default-character-set = utf8

首先,但我的mysql服务器没有重启

然后我试过

character-set-server = utf8

然后我的mysql shell没有启动

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

如果(一个大的if)smnd可以告诉我应该在哪里使用utf8mb4?还在my.cnf文件中?我把表格放在utf8中并将我正在使用的表格迁移到utf8mb4 ......

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

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

2 个答案:

答案 0 :(得分:2)

PHP manual说:

  

MySQLnd始终采用服务器默认字符集。这个charset是在连接握手/身份验证期间发送的,mysqlnd将使用它。

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

不幸的是,我必须确认即使在我的系统中(在Debian Jessie 8.3上使用MySQL 5.5.47的PHP 5.6.17),尽管已经使用以下条目配置了/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函数中,以提供一种抽象层。

答案 1 :(得分:1)

mysqli_set_charset('utf8')

init_connect个连接会忽略

root

utf8mb4实际上是utf8的超集。中文和新表情符号都需要它,还有一些模糊不清的字符集。