目錄
回复讨论(解决方案)
首頁 後端開發 php教程 mysql插入中文乱码

mysql插入中文乱码

Jun 23, 2016 pm 02:20 PM

php文件里设置了网页编码为utf-8
header("Content-type:text/html; charset=utf-8"); 

插入数据库前设置了传递给数据库的编码为utf-8
$this->mysqli->query("set names utf8");

数据库中,设置了一些字符集有关的变量
查询show variables like 'char%';后结果为


查询show variables like 'collation_%';后结果为


我用的WampServer,修改mysql配置文件my.ini,在[client]节点下添加default-character-set=utf8 ,在[mysqld]节点下添加character_set_server=utf8,然后重启musql服务


但是传到数据库里,中文字符都变成了问号。。请问应该如何设置才能解决乱码?


回复讨论(解决方案)

把你做的所有修改都还原的初始状态!

需要注意的是:
1、所有与字符集相关的设置,都不会影响到数据库中的已有数据
2、字符集相关的设置,只对设置后插入的数据生效
3、数据库是共有资源,不要轻易修改设置。以免引发其他应用的问题

只要做到以下两点,就不会出现乱码问题
1、所有可能会有中文内容的字段,都需要有中文字符集的连接校对。至于是哪个字符集都无所谓(gbk、utf8、ucs2都可以)也不需要每个字段都相同
2、每次在连接数据库之后,执行一次 set name 页面字符集

我就是设置完数据库字符集后删除数据表中原有乱码数据,再执行程序,插入的中文还是乱码。

因为自己练习用的是测试数据库,所以就修改了字符集设置。我自己也记不清默认配置是什么了,怎么恢复啊。。。

每次连接数据库后,我都执行$this->mysqli->query("set names utf8"); 应该没有问题吧?
所有可能会有中文内容的字段,都需要有中文字符集的连接校对,这个每太明白,是指show variables like 'collation_%';语句执行后显示的结果吗?

新手刚入门,请大神不吝赐教,感谢不尽。

连接数据库的工具类

<?php  class MysqliHelper{    private $mysqli;	private static $host = "localhost";    private static $user = "root";	private static $pwd = "";	private static $db = "test";		public function __construct(){	  $this->mysqli = new Mysqli(self::$host,self::$user,self::$pwd,self::$db);	  if($this->mysqli->connect_error){	     die("连接数据库失败".$this->mysqli->connect_error);	  }	   $this->mysqli->query("set names utf8");	}		public function execute_dql($sql){	    $res = $this->mysqli->query($sql) or die($this->mysqli->error);	    return $res;	}		public function execute_dml($sql){	     $res = $this->mysqli->query($sql) or die($this->mysqli->error);		 		 if(!$res){		    return 0;		 }else{		    if($this->mysqli->affected_rows>0){			  return 1;			}else{			  return 2;			}		 }	}  }?>
登入後複製


表的字符集是什么?应该不影响你的保存结果~

表的字符集是什么?应该不影响你的保存结果~

怎么查看表的字符集?我用的都是默认的字符集,修改过的配置请看一楼截图。

shou create table 表名; 或者用phpmyadmin图形化工具也可以查看。

打错,是 show create table 表名; 

CREATE TABLE `tb_userinfo` (
  `id` int(20) NOT NULL AUTO_INCREMENT,
  `username` varchar(20) DEFAULT NULL,
  `password` varchar(20) DEFAULT NULL,
  `email` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=90 DEFAULT CHARSET=latin1



是latin1啊,怎么改成utf8?

CREATE TABLE `tb_userinfo` (
  `id` int(20) NOT NULL AUTO_INCREMENT,
  `username` varchar(20) DEFAULT NULL,
  `password` varchar(20) DEFAULT NULL,
  `email` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=90 DEFAULT CHARSET=latin1



是latin1啊,怎么改成utf8?

进入phpmyadmin修改

删去原表
drop table tb_userinfo

重新创建
CREATE TABLE `tb_userinfo` (
  `id` int(20) NOT NULL AUTO_INCREMENT,
  `username` varchar(20) DEFAULT NULL,
  `password` varchar(20) DEFAULT NULL,
  `email` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=90 DEFAULT CHARSET=utf8

其实可以不用这么做
只需修改连接校对就可以了
ALTER TABLE `tb_userinfo` CHANGE `username` `username` VARCHAR( 20 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL 

改了表字符集,字段也是要改的,你就drop table; 后再重新建表。

CREATE TABLE `tb_userinfo` (
  `id` int(20) NOT NULL AUTO_INCREMENT,
  `username` varchar(20) DEFAULT NULL,
  `password` varchar(20) DEFAULT NULL,
  `email` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=90 DEFAULT CHARSET=utf8;

注意备份数据就好了。其实如果你不担心用phpmyadmin查看乱码的话,只要在php链接数据库的时候设置好字符集,不影响数据的存取。。。正常的话,网站下尽量不挂phpmyadmin,随用随传,免得出问题~~

drop后重新建表,现在表的字符集是utf8了
但是使用

$sql = "insert into tb_userinfo (username,password,email) values('sss李四','123456','lis@sina.com')";

后,插入后只显示sss,如果是纯汉字的话,什么也插不进去。

php文件另存为utf-8 无bom 格式

终于成功了,太感谢大家了。我现在练习,用的记事本创建的php文档,默认编码是ANSI。

但是每次都要这么麻烦的设置吗?
感觉mysql支持中文好麻烦。可能有的地方不需要修改我也改了,不知道哪些配置是必须修改的呢?

参考#1 版主的回复,my.ini 里面的参数都不用改,只需设置好set names utf8; 即可(当然,如果你的表是gbk,这里就为 gbk), 还有你要保证插入的数据的编码要与数据库中的编码一致才行。

人家用 utf-8 是因为他在 linux 下只能用 utf-8
你在 window 下,默认就是 gbk,搞成 utf-8 不是自找麻烦吗?

有人说用 utf-8 是为了国际化,其实有几个洋人能看懂方块字呢?

再次感谢大家,结贴散分。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1670
14
CakePHP 教程
1428
52
Laravel 教程
1329
25
PHP教程
1273
29
C# 教程
1256
24
說明PHP中的安全密碼散列(例如,password_hash,password_verify)。為什麼不使用MD5或SHA1? 說明PHP中的安全密碼散列(例如,password_hash,password_verify)。為什麼不使用MD5或SHA1? Apr 17, 2025 am 12:06 AM

在PHP中,應使用password_hash和password_verify函數實現安全的密碼哈希處理,不應使用MD5或SHA1。1)password_hash生成包含鹽值的哈希,增強安全性。 2)password_verify驗證密碼,通過比較哈希值確保安全。 3)MD5和SHA1易受攻擊且缺乏鹽值,不適合現代密碼安全。

PHP和Python:比較兩種流行的編程語言 PHP和Python:比較兩種流行的編程語言 Apr 14, 2025 am 12:13 AM

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP行動:現實世界中的示例和應用程序 PHP行動:現實世界中的示例和應用程序 Apr 14, 2025 am 12:19 AM

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP類型提示如何起作用,包括標量類型,返回類型,聯合類型和無效類型? PHP類型提示如何起作用,包括標量類型,返回類型,聯合類型和無效類型? Apr 17, 2025 am 12:25 AM

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

PHP的持久相關性:它還活著嗎? PHP的持久相關性:它還活著嗎? Apr 14, 2025 am 12:12 AM

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP和Python:解釋了不同的範例 PHP和Python:解釋了不同的範例 Apr 18, 2025 am 12:26 AM

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

您如何防止PHP中的SQL注入? (準備的陳述,PDO) 您如何防止PHP中的SQL注入? (準備的陳述,PDO) Apr 15, 2025 am 12:15 AM

在PHP中使用預處理語句和PDO可以有效防範SQL注入攻擊。 1)使用PDO連接數據庫並設置錯誤模式。 2)通過prepare方法創建預處理語句,使用佔位符和execute方法傳遞數據。 3)處理查詢結果並確保代碼的安全性和性能。

PHP和Python:代碼示例和比較 PHP和Python:代碼示例和比較 Apr 15, 2025 am 12:07 AM

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

See all articles