mysql中存中文時出現“Data too long for column”

真正的錯誤原因有兩種情況:1.數據庫編碼不對.
 
在創建數據庫時,字符集選擇了latin1以外的其他編碼,這樣在用PHP寫入數據庫時就會出現這種錯誤,因爲mysql的默認編碼是latin1.
 
解決方法:在寫入數據庫時,需要改變一下編碼:mysql_query("set character set gbk");,這樣就不會出現這個錯誤了,但是在phpmyadmin看到的中文都是問號
phpMyAdmin 高版本數據表裏中文字符顯示亂碼的問題。

數據庫情況。
MySQL 版本:5.0.26
MySQL 默認字符集:latin1
論壇數據庫字符集:latin1
phpMyAdmin 版本:2.9.0.2

使用 phpMyAdmin 打開我的數據庫後,發現數據表裏的中文全是全是亂碼,不管如何改變 phpMyAdmin 所使用的語言都無濟於事。
仔細研究一下,發現 phpMyAdmin 默認顯示的網頁編碼是 Unicode UTF-8 ,查看當前 IE 瀏覽器所使用的編碼也就是 Unicode (UTF-8)。

所以我想讓頁面編碼變爲 GB2312,當然啦,強行指定 IE 使用的字符集是不行的。目的是要讓 phpMyAdmin 吐出 GB2312 編碼。

下面是我的修改過程:
打開 phpMyAdmin 根目錄中 libraries/select_lang.lib.php 文件;
找到:

CODE:

'zh-gb2312'         => array('zh|chinese simplified', 'chinese_simplified-gb2312', 'zh', '中文'),
將其改爲:

CODE:

'zh-gb2312-utf-8'         => array('zh|chinese simplified-UTF8', 'chinese_simplified-gb2312', 'zh', '中文'),
再找到:

CODE:

'gb2312'       => 'gb2312',
將其改爲:

CODE:

'gb2312'       => 'latin1',
保存文件退出。

然後從瀏覽器打開 phpMyAdmin ,在首頁選擇 Language 爲:中文-Chinese simplified-UTF8

然後打開數據表看看裏面的中文是不是已經可以正常顯示了

注意:我數據庫的字符集是 latin1 ,如果你的數據庫字符集不是 latin1,那要酌情改動一下修改過程。'gb2312'    => 'your_character_code',
2.另外一種情況

剛纔在導入數據的時候,navicat報錯:
Data too long for column ‘ip’ at row 1
提示數據對於ip字段太長

如果數據類型不正確,也會出錯,而不像4.*那樣自動轉換:
sendQuery:Incorrect datetime value: ‘未知’ for column ‘date’ at row 1

如果是數據x (int 11)類型的可能有些奇怪:
insert into a (x) values (’a')
出現:
Out of range value adjusted for column ‘x’ at row 1

insert into a (x) values (’11a’)
出現:
Data truncated for column ‘x’ at row 1

解決辦法:
在my.ini裏找到
sql-mode=”STRICT_TRANS_TABLES,NO_AUTO_Create_USER,NO_ENGINE_SUBSTITUTION”
把其中的
STRICT_TRANS_TABLES,
去掉,然後重啓mysql就ok了 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章