mysql升级后乱码,MYSQL数据库升级引起的乱码

新版本的MYSQL数据库貌似把数据库编码格式改为了utf8mb4,原来是latin1

结果就是乱码呀乱码

论坛都是问号

好吧,查了一下资料

如果是mysqli连接的话,在连接代码里用下面这个

mysqli_query($conn,”set names utf8″); //数据库编码格式

mysqli_set_charset($conn,”gbk”);//设置默认客户端字符集

如果是mysql连接的话,就用下面这个

mysql_query(“SET names utf8”, $link);//数据库编码格式

mysql_set_charset(“gbk”,$link);//设置默认客户端字符集

Discuz_X3.3_SC_GBK版本,找到/source/class/db/db_driver_mysql.php

修改约101行return $link;前面插入上面第二种代码就可以了

至于如何查看变量,可以进入phpmyadmin,在“变量”菜单里

过滤器输入”char”

然后就可以看到8个变量

一、character_set_client

主要用来设置客户端使用的字符集。

二、character_set_connection

主要用来设置连接数据库时的字符集,如果程序中没有指明连接数据库使用的字符集类型则按照这个字符集设置。

三、character_set_database

主要用来设置默认创建数据库的编码格式,如果在创建数据库时没有设置编码格式,就按照这个格式设置。

四、character_set_filesystem

文件系统的编码格式,把操作系统上的文件名转化成此字符集,即把 character_set_client转换character_set_filesystem, 默认binary是不做任何转换的。

五、character_set_results

数据库给客户端返回时使用的编码格式,如果没有指明,使用服务器默认的编码格式。

六、character_set_server

服务器安装时指定的默认编码格式,这个变量建议由系统自己管理,不要人为定义。

七、character_set_system

数据库系统使用的编码格式,这个值一直是utf8,不需要设置,它是为存储系统元数据的编码格式。

八、character_sets_dir

这个变量是字符集安装的目录。

在启动mysql后,我们只关注下列变量是否符合我们的要求

character_set_client

character_set_connection

character_set_database

character_set_results

character_set_server

下列三个系统变量我们不需要关心,不会影响乱码等问题

character_set_filesystem

character_set_system

character_sets_dir

更改以上字符集直接 set character_set_XXX = “gbk”;(XXX是写以上的变量名)

set指令只是临时生效,如果想永久生效可以到mysql的安装目录下找到my.ini文件,修改里面对应的配置信息即可。

但是往往虚拟主机啥的不给你配置my.ini,没办法只能自己在php连接MySQL函数里设置了

set names xxx命令是一次性统一修改character_set_client、character_set_connection和character_set_results的字符集。它们都是和 client 相关的。而 真正server端的编码字符集,character_set_server 和 character_set_database ,set names ‘xxx’ 根本无法修改。set names ‘xxx’ 命令可以使 character_set_client、character_set_connection、character_set_results 三者统一。client (character_set_client) —–> character_set_connection ——-> mysqld  ——> client(character_set_results)减少编码转换的需要。

参考资料:https://blog.csdn.net/wqh0830/article/details/86476700

查考资料:https://blog.csdn.net/sun8112133/article/details/79921734

PS:

DZ X3.2需要修改的地方主要有3处

\source\elass\db\db_driver_mysql.php 大概100行左右

return $link;

之前插入

mysql_query("SET names utf8", $link);//数据库编码格式

mysql_set_charset("gbk",$link);//设置默认客户端字符集

第二处 \uc_server\lib\db.class.php 里的connect函数里放入

mysql_query("SET names utf8", $this->link);//数据库编码格式

mysql_set_charset("gbk",$this->link);//设置默认客户端字符集

第三处\uc_client\lib\db.class.php 里的connect函数里面放入

mysql_query("SET names utf8", $this->link);//数据库编码格式

mysql_set_charset("gbk",$this->link);//设置默认客户端字符集

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当在MySQL数据库中添加注释时,可能会遇到码的问题。这种情况通常是由于数据库或表字符集与注释字符集不匹配导致的。 首先,我们需要检查数据库或表的字符集设置。我们可以通过运行以下查询来查看: SHOW CREATE DATABASE database_name; SHOW CREATE TABLE table_name; 在结果中,我们需要关注字符集和校对规则相关的部分。 如果数据库或表字符集设置不正确,我们可以通过以下步骤来解决码问题: 1. 在更改任何设置之前,我们需要备份数据库以防止数据丢失。 2. 对于数据库级别的设置,我们可以使用ALTER DATABASE语句来更改字符集和校对规则。例如: ALTER DATABASE database_name CHARACTER SET utf8 COLLATE utf8_general_ci; 3. 对于表级别的设置,我们可以使用ALTER TABLE语句来更改字符集和校对规则。例如: ALTER TABLE table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; 通过以上步骤,我们可以将数据库和表的字符集设置为正确的值。这样,在添加注释时就不会出现码问题了。 如果以上步骤没有解决问题,我们还可以尝试在连接MySQL服务器时指定字符集。例如,在连接命令中添加"--default-character-set=utf8"参数。 需要注意的是,更改字符集可能会影响已有数据的存储和查询。因此,在更改字符集之前,我们应该确保已备份数据库以防止数据丢失,并且在修改之前做足够的测试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值