国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數(shù)據(jù)庫技術(shù)|

服務(wù)器之家 - 數(shù)據(jù)庫 - Mysql - MySQL的中文UTF8亂碼問題

MySQL的中文UTF8亂碼問題

2019-11-07 16:26mysql教程網(wǎng) Mysql

MySQL從4.x版本開始支持Unicode,3.x只有l(wèi)atin1編碼。剛工作的時(shí)候就開始用MySQL了,用的php存取,網(wǎng)頁xxx.php是gb2312的編碼,存進(jìn)去的數(shù)據(jù)用php取出來是中文,用phpMyAdmin執(zhí)行select、update、dump都是中文,沒有亂碼問題。

從MySQL支持Unicode后,為了與時(shí)俱進(jìn),我們的web程序也開始考慮用UTF8了。其實(shí)UTF8也用了好幾年了,程序基本能跑,沒什么大問題,但是數(shù)據(jù)倒換的時(shí)候,總是遇到不爽的事情。

【問題現(xiàn)象】

網(wǎng)頁xxx.php用EditPlus另存為UTF8格式,MySQL在my.ini里設(shè)置default-character-set=utf8,建表時(shí)加了CREATE TABLE `xxx ` (myname varchar(255)) ENGINE=MyISAM DEFAULT CHARSET=utf8,用xxx.php執(zhí)行insert/update/select出來的都是中文,貌似沒問題,但是用phpMyAdmin看select是亂碼,用第三方工具軟件(如SQLyog)看select也是亂碼,mysqldump也是亂碼,很不爽。當(dāng)然,如果你建表的時(shí)候,選擇了binary/varbinary/blob類型,不會(huì)發(fā)現(xiàn)亂碼,因?yàn)橹付ǖ氖嵌M(jìn)制保存,MySQL保存數(shù)據(jù)時(shí)就沒有編碼的概念了。

【查找問題】

雖然在my.ini里設(shè)置default-character-set=utf8,但是執(zhí)行以下命令時(shí)有新發(fā)現(xiàn):

mysql> SHOW VARIABLES LIKE 'character%';

+----------------------------------------+-------------------------

| Variable_name            | Value

+----------------------------------------+-------------------------

| character_set_client       | latin1

| character_set_connection   | latin1

| character_set_database    | utf8

| character_set_filesystem    | binary

| character_set_results       | latin1

| character_set_server       | utf8

| character_set_system      | utf8

| character_sets_dir         | D:\mysql\share\charsets\

+----------------------------------------+-------------------------

8 rows in set (0.00 sec)

 

mysql> SHOW VARIABLES LIKE 'collation_%';

+---------------------------------------+------------------

| Variable_name           | Value           

+---------------------------------------+------------------

| collation_connection     | latin1_swedish_ci

| collation_database       | utf8_general_ci 

| collation_server         | utf8_general_ci 

+--------------------------------------+------------------

3 rows in set (0.00 sec)

發(fā)現(xiàn)Value列里面不全是utf8,仍然有部分是latin1,比如其中的client和connection。那網(wǎng)頁xxx.php的工作過程就是這樣的啦:從xxx.php頁面上輸入漢字,因?yàn)閤xx.php是UTF8編碼的,所以xxx.php以UTF8格式轉(zhuǎn)換輸入的漢字,然后以UTF8提交給mysql,但是mysql的client和connection都是latin1的,而表是UTF8的,所以mysql存儲(chǔ)時(shí),先將xxx.php提交的漢字,轉(zhuǎn)成latin1的格式,再轉(zhuǎn)成UTF8字符格式存在表中。如果此時(shí)我們用第三方軟件或者phpMyAdmin去select查看此表,而表中存儲(chǔ)的數(shù)據(jù)是被latin1過的UTF8字符,出來的時(shí)候是以UTF8格式取的,當(dāng)然看起來時(shí)亂碼了。解決方法就是讓所有過程都是UTF8的就可以了。

【解決問題】

1、從my.ini下手

[client]

default-character-set=utf8

[mysql]

default-character-set=utf8

[mysqld]

default-character-set=utf8

以上3個(gè)section都要加default-character-set=utf8,平時(shí)我們可能只加了mysqld一項(xiàng)。

然后重啟mysql,執(zhí)行

mysql> SHOW VARIABLES LIKE 'character%';

mysql> SHOW VARIABLES LIKE 'collation_%';

確保所有的Value項(xiàng)都是utf8即可。

2、建表時(shí)加utf8,表字段的Collation可加可不加,不加時(shí)默認(rèn)是utf8_general_ci了。

CREATE TABLE `tablename4` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`varchar1` varchar(255) DEFAULT NULL,

`varbinary1` varbinary(255) DEFAULT NULL,

PRIMARY KEY (`id`)

)  ENGINE=MyISAM  DEFAULT CHARSET=utf8

 

3、網(wǎng)頁xxx.php保存時(shí)選擇utf8編碼,頁頭最好加上

header('conten-type:text/html;charset=utf-8');

在執(zhí)行CRUD操作前先執(zhí)行一下

mysql_query("set names utf8");

測試代碼xxx.php如下:

<?php

header('conten-type:text/html;charset=utf-8');

mysql_connect("localhost", "root", "password") or die("Could not connect: " . mysql_error());

mysql_select_db("test");

mysql_query("set names utf8");

$str = "CHN 軟件開發(fā)有限公司,JPN ソフトウェア開発株式會(huì)社,KOR ????? ?? ?? ??,RUS Суд программного обеспечения".time();

$sql = "insert into tablename4 (varchar1, varbinary1 ) values ('".$str."','".$str."')";

echo $sql."<hr>";

mysql_query($sql);

 

$result = mysql_query("SELECT id, varchar1 ,varbinary1 FROM tablename4");

while ($row = mysql_fetch_array($result, MYSQL_BOTH)) {

printf ("ID: %s , varchar1: %s, varbinary1: %s<br>", $row[0], $row["varchar1"], $row["varbinary1"]);

}

 

mysql_free_result($result);

?>

如此設(shè)置之后,無論是在php頁面插入任何utf8字符,在php頁面里取出來的,在phpMyAdmin里取出來的,在mysql的第三方客戶端軟件里取出來的,都是一樣的漢字了,不會(huì)再發(fā)現(xiàn)亂碼,mysqldump出來的也是漢字。OK,問題解決。

【另】在中文windows系統(tǒng)下,在cmd.exe里運(yùn)行mysql.exe字符終端,不能使用上面的規(guī)則,因?yàn)槟J(rèn)情況下,中文windows系統(tǒng)cmd.exe里的代碼頁是cp936即GBK,不能顯示全部UTF8字符,所以在字符終端里看到亂碼是正常現(xiàn)象,不要奇怪,這個(gè)問題在類Unix系統(tǒng)的shell終端里可以解決的。

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 日韩精品一区在线 | 狠狠躁夜夜躁人人爽天天天天97 | 字幕网av| 亚洲视频在线看 | 欧美精品成人一区二区在线 | 91精品国产一区二区 | 国产精品久久久久久久久久久久久 | 午夜播放器在线观看 | 午夜精品 | 国产精品欧美一区二区三区不卡 | 日韩精品专区在线影院重磅 | 亚洲在线播放 | 99热在线精品播放 | 久久久久久久久久久精 | 日本不卡高字幕在线2019 | av网站免费在线观看 | 在线播放一区二区三区 | 国产精品夜间视频香蕉 | 亚洲精品久久久久久下一站 | 亚洲成人一区 | 亚洲精品免费在线 | 午夜精品一区 | 久久久久久久久久久久久av | 懂色一区 | 久久综合久久久 | 国产精品视频入口 | 一本久道久久综合狠狠爱 | 日韩视频精品在线 | 精品久久久久久久久久久 | 国产精品一区二区在线观看 | 成人小视频在线看 | 中文字幕精品一区二区精品绿巨人 | 欧美午夜一区二区三区免费大片 | 亚洲爽爽| 国产精品免费网站 | 日日操av | 色婷婷综合久久久中字幕精品久久 | 国产精品久久久久久久久久久久久 | 一级网站在线观看 | 蜜桃视频 精品区 | 欧美综合一区 |