1. 程式人生 > >解決mysql生僻字中文亂碼顯示異常處理舉例

解決mysql生僻字中文亂碼顯示異常處理舉例

其他中文顯示非常正常,但是在寫入“姮”、"旻"等比較生僻的人名時報告錯誤:
Incorrect string value "..." for column ...

看似是gb2312字符集不全面的問題,換用gbk的話應該就沒什麼問題了,
但是疑問在這裡:資料和程式以及前臺都使用的是utf8字符集,
難道utf8字符集支援的中文還沒有gbk全面嗎,理論來說是不可能的,utf8編碼直接對映unicode,字符集應該是最全面的。

資料庫設定是正確的:
MYSQL配置檔案my.ini 中 default-character-set=utf8
建立的資料庫的charset也是utf8
甚至要寫入的表"tb_test"的charset也是utf8, collection是utf8_general_ci

php中連線資料庫時也明文指定了字符集:


$db = mysql_connect($dbhost, $dbuser, $dbpwd);
mysql_query("SET NAMES utf8", $db);
mysql_select_db($dbname, $db);

但是為什麼會出現這種錯誤呢?反覆檢查之後發現,原來tb_test中,儲存人名的`name`列的編碼方式居然是gb2312。(系統是從舊系統整合和升級過來的,而資料表也來自舊資料表,以前的系統是gb2312編碼的,升級過程中程式設計師只修改到表的字符集,而沒有修改列的字符集)

解決方法:
將表結構和資料dump成文字指令碼,使用支援utf8編碼的編輯器開啟指令碼(推薦EditPlus),去除指定列的字符集gb2312的修飾符(因為表的字符集已經是utf8,所以去除列的字符集修飾後,列的字符集會自動繼承表的設定,成為utf8)。如sql檔案中其中一行:
`name` varchar(32) character set gb2312 NOT NULL,
刪除其中字符集部分:
`name` varchar(32) NOT NULL,
如果儲存的資料不是utf8的編碼,還要使用EditPlus的 文件/文件編碼方式 功能將資料轉換為utf8編碼。
修改轉換完畢後儲存指令碼,備份舊錶,執行這個指令碼檔案,列的字符集設定就統一為utf8了。

心得:

可以看出,MYSQL(本文所說的mysql版本為5.067)的字符集設定分為4個層次
1.伺服器預設設定 my.ini 中的 default-character-set=utf8
2.建立資料庫時的字符集指定:CREATE DATABASE CHARACTER SET utf8;
3.建立表時的字符集指定:CREATE TABLE  `db_database`.`tb_test` (....)  DEFAULT CHARSET=utf8;
4.建立列時,指定的字符集:ADD COLUMN `name` VARCHAR(45) CHARACTER SET utf8

其中某一級如果不指定字符集,則會自動繼承上一級的字符集設定。
所以為了方便日後的整合、升級和移植等工作,如果無特殊需求,建立資料庫的時候將字符集指定到“資料庫”或“表”級別即可,無需給每一列都顯式地指定字符集。

相關推薦

解決mysql生僻中文亂碼顯示異常處理舉例

其他中文顯示非常正常,但是在寫入“姮”、"旻"等比較生僻的人名時報告錯誤:Incorrect string value "..." for column ...看似是gb2312字符集不全面的問題,換用gbk的話應該就沒什麼問題了,但是疑問在這裡:資料和程式以及前臺都使用的是utf8字符集,難道utf8字

解決mysql無法插入中文資料及插入後顯示亂碼的問題【親測圖文解說!】【轉載】

(1)廢話不多說就是使用mysql資料庫的時候無法輸入中文,可以輸入中文後顯示的又是亂碼!! (2)不說了!開始解決問題! 第一步:找到安裝mysql的目錄找到 my.ini 檔案; 第二步:使用記事本開啟my.ini檔案 , 找到這個地方 看看default-character-set 是不是 ut

Spring Boot JPA MySQL 入庫MySQL資料庫時中文亂碼解決辦法

問題表述:        上篇部落格中抒寫了Spring Data Jpa實體類自動建立資料庫表失敗解決即原因(踩過的坑),接著在操作JPA插入資料進資料庫時,發現數據庫的值為中文亂碼(??),需要注意一下的配置點,所以記錄一下,希望能幫到大家(#^.^#

Ubuntu 13.04 mysql 5.5 中文亂碼解決方案

首先是安裝MySql ,安裝命令:sudoapt-get install mysql-server 通過這個命令安裝的Mysql的版本是5.5的,在5.5中與前面版本中有一點小差別。 在使用MySql中的時候,遇到了一點小的問題,用JDBC連線,使用中文,用UTF8還是會有亂碼,

navicat for mysql 中文亂碼 顯示?問號 BUG

如果中文顯示???號 這個破問題害的我去SHOW VARIABLES LIKE '%colla%';沒用。 my.cnf 各種改 phpmyadmin 都沒錯,沒用。關鍵是 oh my zsh裡面查詢是中文的,phpm

mysql資料庫插入中文亂碼或問號--解決歷程

               mysql> SET character_set_results='utf8'      重點來了!!上述都弄好的話(如果沒看懂再看下其他部落格,大同小異),用資料庫命令執行一下INSERT INTO table VALUES(‘中文’,'中文');看資料庫能不能顯示中文,

Tomcat 中 jsp 中文亂碼顯示處理解決方案

JSP 中文亂碼處理解決方案初學JSP,尤其是Tomcat環境,經常會因為中文漢字字符集設定問題導致中文亂碼,本文就這一問題提出解決方案,解決中文亂碼問題,供各位參考,我採用的方案是統一字符集至UTF-

mysql資料庫出現中文亂碼的終極解決辦法

一.windows環境:   1.找到配置檔案my.ini,一般在mysql安裝目錄下 (通過everything搜尋),開啟   2. .在標籤[mysql] 下新增或修改 default-character-set=utf8   .在

解決利用Sqoop匯入MySQl出現的中文亂碼問題

當使用Sqoop工具向MySQl資料庫匯入資料時,可能會出現中文亂碼問題,原因是character_set_server預設設定是latin1,不是中文編碼。1.查詢資料庫當前的字元編碼格式,可以使用如下命令:mysql> show variables like ‘ch

hibernate插入Mysql資料庫出現中文亂碼情況從這5個方面解決

因為有了新電腦所以又要解決亂碼問題,在網上找帖子很是頭疼,還是自己總結一下比較好。 hibernate插入Mysql資料庫出現中文亂碼情況從這幾個方面解決:有了這幾方面以後使用mysql的亂碼問題就不

Oracle使用——PLSQL的中文亂碼顯示全是問號解決辦法

1.針對登錄檔中有Oracle項解決辦法: 1> 開始——>執行——>輸入regedit——>enter進入登錄檔 2> HKEY_LOCAL_MACHINE—>SOFTWARE —> ORACLE—>KEY

mysql資料表中文亂碼解決辦法

在往mysql資料庫中插入資料的時候出現數據(漢字)亂碼情況: 在把資料庫,資料表的編碼改為UTF-8後,還是亂碼。 Mysql的預設編碼方式是Latin1,不支援中文,因此,如果要讓mysql支援中文的話需要把資料庫預設的編碼修改為gbk或者utf8。 1.檢視資料庫的

Python連線MySQL中有關中文亂碼解決問題

一、MySQLdb中文亂碼問題的解決(Python) 寫了一個簡單的指令碼,將我的資料整理到Mysql中去。遇到了亂碼問題,改了一下,很快就解決了。連線mysql時要注意註明是utf-8字符集,所有中文都要是utf-8,如果有GBK也要先轉換成utf-8,把握這個原則,中文亂碼問題是不會有的。 轉換指令碼如

QT解決中文亂碼顯示問題

1.新增標頭檔案:#include<QTextCodec> 2.在main函式中新增如下幾行程式碼:                 QTextCodec*codec=QTextCodec::codecForName("GB2312"); QTextCodec:

解決Java程式向mysql資料庫插入中文亂碼問題的多種方式

方式一:設定編碼統一 1.設定eclipse環境編碼 2.設定mysql環境編碼 mydb為需要修改的資料庫名稱 方式二:建立資料庫時設定編碼 1.mysql建立database時設定編碼 create database myd

MySQL生僻插入失敗的處理方法

mysql生僻字插入失敗的處理方法最近,業務方反饋有個別用戶信息插入失敗,報錯提示類似"Incorrect string value:"\xF0\xA5 ..... " 看這個提示應該是字符集不支持某個生僻字造成的。下面是在虛擬機裏復現的場景:step1、模擬原始表結構字符集環境:use test;CRE

解決springmvc返回json中文亂碼

jackson ons con handle json 額外 adapter blog 設置 [email protected]/* */,這個問題上網找了很久,發現答案真是人雲亦雲,奉上我的解決方案: 解決方案一:需要導入 jackson-core-asl-1

Android Studio解決Java程序輸出中文亂碼

roc 中文 Coding str uil nbsp process option clas 經查閱資料,發現需要手動在build.gradle中添加代碼 //新版 tasks.withType(JavaCompile) { options.encoding = "UT

解決 Linux centos crt 中文 亂碼 問號

Linux centos crt 中文如何查看linux系統語言 echo $LANG一般顯示為en_US.UTF-8這也是系統默認的語言 查看是否有中文語言包 locale若沒有zh_CN.UTF-8相關內容,說明沒有安裝語言包, 安裝方法如下(centos或者RedHat系列,debian使用ap

解決node裏面的中文亂碼

學習 後來 啟動 head 資料 代碼 html har count 今天咋學習node的時候,跟著視頻裏在擼代碼,但是卻出現了中文亂碼的情況,視頻中的谷歌瀏覽器可能和我的版本不一致,先看代碼吧: ‘use strict‘; const http = require