程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL latin1字符集中文亂碼解決方案

MySQL latin1字符集中文亂碼解決方案

編輯:MySQL綜合教程

出面mysql中文亂碼最多的就是數據庫編碼的問題了,如果我們數據庫編碼是latin1字符集,但我們直接保存gbk就有可能出現中文亂碼了,下面我總結了一些解決辦法。

先看我的實例


字符集出現錯誤解決辦法

出現的問題:
  mysql> update users
  -> set username='關羽'
  -> where userid=2;
  ERROR 1366 (HY000): Incorrect string value: 'xB9xD8xD3xF0' for column 'usern
  ame' at row 1

向表中插入中文字符時,出現錯誤。
  
  mysql> select * from users;
  +--------+----------+
  | userid | username |
  +--------+----------+
  | 2 | ???? |
  | 3 | ???? |
  | 4 | ?í?ù |
  +--------+----------+
  3 rows in set (0.00 sec)


對數據庫操作

以下是查看字符集和排序方式的命令,用phpmyadmin可以直接用sql方式運行myql>之後的命令:

mysql> SHOW VARIABLES LIKE 'character_set_%';
+————————–+—————————-+
| Variable_name | Value |
+————————–+—————————-+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | latin1 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+————————–+—————————-+
7 rows in set (0.00 sec)

mysql> SHOW VARIABLES LIKE 'collation_%';
+———————-+——————-+
| Variable_name | Value |
+———————-+——————-+
| collation_connection | latin1_swedish_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+———————-+——————-+
3 rows in set (0.00 sec)


使用php讀出數據,需要加入


mysql_query("SET NAMES 'LATIN1'")

此時會發現latin1輸出的中文亂碼在頁面顯示已經可以正常(頁面的編碼是gbk,這時正常就說明讀取出來的中文字是gbk編碼的了),再插入utf8存儲的數據庫時因為數據格式不正常,無法正常插入,此時就需要用php來進行數據的轉碼。


iconv('gbk','utf-8',XXXXX);

這裡要注意,如果要導入到utf8字符集的DB中是設定的原先插入到latin1 db中的原始編碼格式(本文中的測試後確定為gbk編碼)轉為utf8,因此用網頁的編碼方式不斷調試輸出,直到頁面呈現正常的中文字符為止,這種方法可以逆向推出插入db時的中文字符編碼格式。

MySQL 5.5的修改字符集編碼為UTF8(徹底解決中文亂碼問題)


最簡單的完美修改方法,修改mysql的my.cnf文件中的字符集鍵值(注意配置的字段細節):

1、在[client]字段裡加入default-character-set=utf8,如下:

[client]
port = 3306
socket = /var/lib/mysql/mysql.sock
default-character-set=utf8

2、在[mysqld]字段裡加入character-set-server=utf8,如下:

[mysqld]
port = 3306
socket = /var/lib/mysql/mysql.sock
character-set-server=utf8

3、在[mysql]字段裡加入default-character-set=utf8,如下:

[mysql]
no-auto-rehash
default-character-set=utf8

修改完成後,service mysql restart重啟mysql服務就生效。注意:[mysqld]字段與[mysql]字段是有區別的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved