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

Posted

技术标签:

【中文标题】mysql将默认字符集latin1更改为utf8【英文标题】:mysql change default character set latin1 to utf8 【发布时间】:2015-09-29 15:20:34 【问题描述】:

我有 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 = '设置名称 utf8' 解决了非root用户的问题,但字符集保持不变(它只显示为非特权用户UTF8,它仍然是Latin1)。

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

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

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

【问题讨论】:

【参考方案1】:

mysqli_set_charset('utf8').

init_connectroot 连接忽略。

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

【讨论】:

是否可以一劳永逸地在全球范围内做到这一点? 并且 utf8mb4 是真正的 utf8 ...我想我必须在 mysql 中更改它,因为我之前已经添加到 php.ini default_charset = "UTF-8" 但它不起作用。如果(我相信)可以在全球范围内一劳永逸地更改此指令,请更新我,谢谢... 全球...在my.cnf,这可能未来操作建立utf8mb4:character_set_server=utf8mb4如果您有现有数据;这将需要以其他方式处理。【参考方案2】:

PHP manual 说:

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),而是将连接字符集设置为 latin1 并使用整理 latin1_swedish (考虑到 MySQL AB 可能是默认值一家瑞典公司)。

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

$mysqli->set_charset("utf8")

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

【讨论】:

以上是关于mysql将默认字符集latin1更改为utf8的主要内容,如果未能解决你的问题,请参考以下文章

将 MySQL 字段字符集从 latin1 更改为 utf8_general_ci 会破坏元音变音 (ä,ö,ü)

Mysql 将排序规则从 latin1_swedish_ci 更改为 utf8mb4_bin

如何将所有行的排序规则从 latin1_swedish_ci 更改为 utf8_unicode_ci?

为啥我的 View 是 utf8 以及如何将其更改为 latin1

MySQL 将 latin1 数据转换为 UTF8

MySQL默认字符集设置