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_connect
被 root
连接忽略。
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?