1樓:己聞楣
client characterset也是utf8時,你需要自己把sql命令中的中文也轉換為utf8編碼,最好將client characterset設為cp936、gbk等,由伺服器在儲存時自動轉換編碼。
2樓:匿名使用者
mysql沒錯,但是大部分文字工具預設的字元編碼是gbk,你需要吧編碼也改成utf-8才能插入資料庫
3樓:1o年1o月
很可能你 php 檔案是 ansi 編碼的.
有集中解決辦法, 你自己考慮
1, 把你 php 的檔案都轉換成 utf8 編碼, windows- 記事本 - 開啟後 - 另存為 (編碼部分選擇 utf8)
如果你 php 檔案比較多, 那恐怕轉換起來就比較麻煩, 不過這是一個好習慣.
2, 在你執行所有的 sql 語句之前, php 增加一條語句 mysql_query('set names utf8');
如果 mysql_query('set names utf8'); 還是亂碼, 換成 mysql_query('set names gbk');祝好運
mysql設定字符集為utf8還是中文亂碼
4樓:愛可生雲資料庫
一、轉碼失敗
在資料寫入到表的過程中轉碼失敗,資料庫端也沒有進行恰當的處理,導致存放在表裡的資料亂碼。
針對這種情況,前幾篇文章介紹過客戶端傳送請求到服務端。
其中任意一個編碼不一致,都會導致表裡的資料存入不正確的編碼而產生亂碼。
比如下面簡單一條語句:
set @a = "文字字串";
insert into t1 values(@a);
變數 @a 的字元編碼是由引數 character_set_client 決定的,假設此時編碼為 a,也就是變數 @a 的編碼。
2. 寫入語句在傳送到 mysql 服務端之前的編碼由 character_set_connection 決定,假設此時編碼為 b。
3. 經過 mysql 一系列詞法,語法解析等處理後,寫入到表 t1,表 t1 的編碼為 c。
那這裡編碼 a、編碼 b、編碼 c 如果不相容,寫入的資料就直接亂碼。
二、客戶端亂碼
表資料正常,但是客戶端展示後出現亂碼。
這一類場景,指的是從 mysql 表裡拿資料出來返回到客戶端,mysql 裡的資料本身沒有問題。客戶端傳送請求到 mysql,表的編碼為 d,從 mysql 拿到記錄結果傳輸到客戶端,此時記錄編碼為 e(character_set_results)。
那以上編碼 e 和 d 如果不相容,檢索出來的資料就看起來亂碼了。但是由於資料本身沒有被破壞,所以換個相容的編碼就可以獲取正確的結果。
這一類又分為以下三個不同的小類:
1)欄位編碼和表一致,客戶端是不同的編碼
比如下面例子, 表資料的編碼是 utf8mb4,而 session 1 發起的連線編碼為 gbk。那由於編碼不相容,檢索出來的資料肯定為亂碼。
2)表編碼和客戶端的編碼一致,但是記錄之間編碼存在不一致的情形
比如表編碼是 utf8mb4,應用端編碼也是 utf8mb4,但是表裡的資料可能一半編碼是 utf8mb4,另外一半是 gbk。那麼此時表的資料也是正常的,不過此時採用哪種編碼都讀不到所有完整的資料。這樣資料產生的原因很多,比如其中一種可能性就是表編碼多次變更而且每次變更不徹底導致(變更不徹底,我之前的篇章裡有介紹)。
舉個例子,表 t3 的編碼之前是 utf8mb4,現在是 gbk,而且兩次編碼期間都被寫入了正常的資料。
3)每個欄位的編碼不一致,導致亂碼和第二點一樣的場景。不同的是:非記錄間的編碼不統一,而是每個欄位編碼不統一。
舉個例子,表 c1 欄位 a1,a2。a1 編碼 gbk,a2 編碼是 utf8mb4。那每個欄位單獨讀出來資料是完整的,但是所有欄位一起讀出來,資料總會有一部分亂碼。
三、latin1
還有一種情形就是以 latin1 的編碼儲存資料
估計大家都知道字符集 latin1,latin1 對所有字元都是單位元組流處理,遇到不能處理的位元組流,保持原樣,那麼在以上兩種存入和檢索的過程中都能保證資料一致,所以 mysql 長期以來預設的編碼都是 latin1。這種情形,看起來也沒啥不對的點,資料也沒亂碼,那為什麼還有選用其他的編碼呢?原因就是對字元儲存的位元組數不一樣,比如 emoji 字元 "❤",如果用 utf8mb4 儲存,佔用 3 個位元組,那 varchar(12) 就能存放 12 個字元,但是換成 latin1,只能存 4 個字元。
5樓:匿名使用者
create table `days_user` (
`id` int(10) unsigned not null auto_increment,
`state` int(5) default null,
`nickname` varchar(20) character set utf8 collate utf8_unicode_ci default null,
`createtime` timestamp null default null,
primary key (`id`)
) engine=innodb auto_increment=15 default charset=utf8
2、在配置檔案中,my.ini,指定default-character-set=utf-8;
3、在eclipse中也指定了編碼方式,utf-8;
4、jdbc中訪問的編碼方式也特別指定編碼;
我已經將mysql的字元編碼集設定為utf8了,可還是在插入中文的時候報異常或是顯示中文的時候亂碼? 20
6樓:
先執行一句 set names gbk; 再執行你的select語句 試試看
7樓:儒雅的
我也出現了跟你一樣的問題,現在已經成功解決,原因是你可能在建立這張表之後修改的mysql的編碼,你應該試試再創一張表,再向裡面插入就沒有問題了。。之前的表可能沒辦法更新為utf8,我是這樣的問題,希望對你有幫助
8樓:祝福滿滿
我的也是這樣,同求!!!!1
9樓:匿名使用者
你的xp太老了。不確定打了utf8的補丁。
php顯示mysql資料亂碼,字符集設定都是utf8,資料庫也是utf8,一直找不到問題在**,**見詳細,求大神
10樓:隴行
php+mysql的utf-8中文亂碼問題的解決方法
問題彙總:
1.mysql資料庫預設的編碼是utf8,如果這種編碼與你的php網頁不一致,可能就會造成mysql亂碼.
2.mysql中建立表時會讓你選擇一種編碼,如果這種編碼與你的網頁編碼不一致,也可能造成mysql亂碼.
3.mysql建立表時新增欄位是可以選擇編碼的,如果這種編碼與你的網頁編碼不一致,也可能造成mysql亂碼.
4.使用者提交頁面的編碼與顯示資料的頁面編碼不一致,就肯定會造成php頁面亂碼.
5.如使用者輸入資料的頁面是big5碼, 顯示使用者輸入的頁面卻是gb2312,這種100%會造成php頁面亂碼.
6.php頁面字符集不正確.
7.php連線mysql資料庫語句指定的編碼不正確.
使用mysql+php產生亂碼的原因都瞭解得很清楚了,那麼解決就不困難了.
針對不同問題的解決方法:
1.mysql資料庫預設的編碼是utf8,如果這種編碼與你的php網頁不一致,可能就會造成mysql亂碼.
修改資料庫編碼,如果是資料庫編碼不正確,可以在phpmyadmin 執行如下命令:
alter database 'test' default character set utf8 collate utf8_bin
以上命令就是將test資料庫的編碼設為utf8.
2.mysql中建立表時會讓你選擇一種編碼,如果這種編碼與你的網頁編碼不一致,也可能造成mysql亂碼.
修改表的編碼:
alter table 'category' default character set utf8 collate utf8_bin
以上命令就是將一個表category的編碼改為utf8.
3.mysql建立表時新增欄位是可以選擇編碼的,如果這種編碼與你的網頁編碼不一致,也可能造成mysql亂碼.
修改欄位的編碼:
alter table 'test' change 'dd' 'dd' varchar( 45 ) character set utf8 collate utf8_bin not null
以上命令就是將test表中 dd的欄位編碼改為utf8.
4.使用者提交頁面的編碼與顯示資料的頁面編碼不一致,就肯定會造成php頁面亂碼.
如果是這種情況容易解決,只需檢查下頁面,修改原始檔的charset即可.
5.如使用者輸入資料的頁面是big5碼, 顯示使用者輸入的頁面卻是gb2312,這種100%會造成php頁面亂碼.
這種情況也是修改頁面charset即可.
6.php頁面字符集不正確.
為了避免php頁面亂碼的發生,php頁面開始第一句
header("content-type:text/html; charset=utf-8");
//強行指定頁面的編碼,以避免亂碼
7.php連線mysql資料庫語句指定的編碼不正確.
在連線資料庫的語句中.
mysql_connect('localhost','user','password');
mysql_select_db('my_db');
mysql_query("set names 'utf8'"); //select 資料庫之後加多這一句
mysql字符集問題 為什麼字符集設定為gbk語句能查詢 但設定為utf-8就不行了呢 5
11樓:匿名使用者
那你程式指令碼是什麼字符集的?必須資料庫 指令碼 網頁 都是相同字符集才行
mysql自動生成字串的主鍵是自動增長的
建議使用uuid作為主鍵,select replace uuid insert的時候用這個replace uuid mysql 通過auto increment設定 mysql create table test create tab2 id int auto increment,val varch...
我的MYSQL資料庫當中的存入的是漢字,但是在資料庫當中變成了而且網頁瀏覽輸出的時候也是
這個問題我遇到過,其實很容易就能解決的。在你安裝mysql的目錄下應該有個bin目錄,裡面有個什麼什麼config這個,用這個進行資料庫的配置,其中有一項讓選字符集,選擇gbk或者gb2312就可以了。這樣就不是?了 高手進來下,我在mysql中直接寫入漢字,可以顯示漢字,但是在jsp註冊頁面錄入漢...
我的使用者名稱是XP系統預設的Administrator,就僅此使用者名稱,並無其他使用者名稱了
直接進入帶命令提示的安全模式 在dos下輸入 輸入 net user administrator active yes 或者是啟用你原來使用的帳號 net user 帳號名 active yes 當顯示 命令完成時 關閉cmd.exe然後重啟電腦就行 你可以自己建個使用者的,點開始 設定 控制面板 ...