久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

如何終結mysql中文亂碼

151次閱讀
沒有評論

共計 8324 個字符,預計需要花費 21 分鐘才能閱讀完成。

本篇文章給大家分享的是有關如何終結 mysql 中文亂碼,丸趣 TV 小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著丸趣 TV 小編一起來看看吧。

我自己都不知道為了中文問題煩惱了多少個日子,最恨瑞典人了 - 誰叫他發明了 mysql,還設置了默認設置:latin1. 曾經也在想假如中國人發明了 mysql(my see 狗),呵呵,那么我們還有這樣煩惱嗎?默認的就是 gk2312 或者 gbk. 倘若考慮到臺灣朋友加一個 big5. 就得了。可是呢?事實不是這樣的,沒有辦法,自己只好 baidu 一下,google 一下,甚至 yahoo 一下。能找到的方法都試過了,好久了,直到今天讓我找到了,想明白了。所以急切和大家分享以下心得。
  為了說的明白一些,我覺個例子:
很簡單,就是從 html 中接受兩個輸入,然后由 jsp 處理寫到 mysql 且從數據庫返回這個結果顯示出來。
Mysql_jstl.html

html
head
  title CH14 – Mysql_jstl.html /title
meta http-equiv= Content-Type content= text/html; charset= GB2312
/head
body

h3 將信息存入 Mysql 中 – 使用 JSTL 寫法 /h3
form name= form action= Mysql_jstl.jsp method= post
  p 姓:input name= last_name type= text id= last_name /p
  p 名:input name= first_name type= text id= first_name /p
  p
    input type= submit value= 傳送
    input type= reset value= 取消
  /p
/form

/body
/html




Mysql_jstl.jsp %@ page contentType= text/html;charset=GB2312 %
%@ taglib prefix= c uri= http://java.sun.com/jsp/jstl/core %
%@ taglib prefix= sql uri= http://java.sun.com/jsp/jstl/sql %
%@ taglib prefix= fmt uri= http://java.sun.com/jsp/jstl/fmt %

html
head
  title CH14 – Mysql_jstl.jsp /title
/head
body

h3 將信息存入 Mysql 中 – 使用 JSTL 寫法 /h3

fmt:requestEncoding value= GB2312 /

c:set var= birth value= 1978/12/11 /
c:set var= sex value= F /
c:set var= email value= aaa@asdf.com /

sql:setDataSource driver= com.mysql.jdbc.Driver
        url= jdbc:mysql://localhost:3306/sample?useUnicode=true characterEncoding=UTF-8
        user= root
        password= 44444 /

sql:update
 INSERT INTO employee(employee_id, last_name, first_name, birth, sex, emmail)
 VALUES (? , ? , ? , ? , ? , ?)
 
  sql:param value= ${employee_id} /
  sql:param value= ${param.last_name} /
  sql:param value= ${param.first_name} /
  sql:param value= ${birth} /
  sql:param value= ${sex} /
  sql:param value= ${email} /
/sql:update

sql:query var= result
 SELECT * FROM employee
/sql:query

從 employee 取出所有新增的姓名:br
c:forEach items= ${result.rows} var= row
新增姓名:c:out value= ${row.last_name} /
    c:out value= ${row.first_name} / br
/c:forEach

/body
/html


接下來就是創建數據庫,名字為 sample

然后建立一個 table: employee, 內容如下(其中應該是 email, 可是我不小心在建數據庫打錯了,將錯就錯了):
+————-+——————+——+—–+———+—————-+
| Field       | Type             | Null | Key | Default | Extra          |
+————-+——————+——+—–+———+—————-+
| employee_id | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| last_name   | varchar(20)      | YES  |     | NULL    |                |
| first_name  | varchar(20)      | YES  |     | NULL    |                |
| birth       | date             | YES  |     | NULL    |                |
| sex         | enum(m , f)    | YES  |     | m       |                |
| emmail      | varchar(39)      | YES  |     | NULL    |                |
+————-+——————+——+—–+———+—————-+

如果只是這樣的話,就會出現這樣的錯誤:報告的錯誤是:sqle=com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long
for column last_name at row 1 從 employee!
有的情況是:| name        |
+————-+
| ??          |
| 54243654321 |
| ??          |
| ??          |
+————-+ 出現問號!

前面我們已經說過了,mysql 默認的編碼是 latin1, 不是我們所需要的 gbk, 所以我們要修改成為 utf8,因為若要正確顯示中文繁、簡、日文、韓文 使用 utf8,修改方法如下:
 ALTER DATABASE sample #### 這里修改整個數據庫的編碼
      CHARACTER SET utf8
      DEFAULT CHARACTER SET utf8
      COLLATE utf8_general_ci
      DEFAULT COLLATE utf8_general_ci;

當然了,你也可在在建數據庫的時候指定編碼,比如:

CREATE DATABASE sample

      CHARACTER SET utf8
      DEFAULT CHARACTER SET utf8
      COLLATE utf8_general_ci
      DEFAULT COLLATE utf8_general_ci ;

接下來要做的是打開 mysql 所在的目錄下的 my.nin

mysql  show variables like  %character% 
+--------------------------+-------------------------------------------+
| Variable_name | Value |
+--------------------------+-------------------------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | utf8 |
| character_set_results | latin1 |
| character_set_server | utf8 
| character_set_system | utf8 |
| character_sets_dir | C:MySQLMySQL Server 5.0sharecharsets |
+--------------------------+-------------------------------------------+
mysql  show variables like  %collation% 
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-------------------+



接著你再看看執行那個 Mysql.html 文件:這回你可以看到的是
mysql select * from employee;
+————-+———–+————+————+——+————–+
| employee_id | last_name | first_name | birth      | sex  | emmail       |
+————-+———–+————+————+——+————–+
|          12 | ?         | ??         | 1978-12-11 | f    | aaa@asdf.com |
|          13 | ?         | ??         | 1978-12-11 | f    | aaa@asdf.com |
|          14 | ?         | ??         | 1978-12-11 | f    | aaa@asdf.com |
|          15 | ?         | ??         | 1978-12-11 | f    | aaa@asdf.com |
|          16 | ?         | ??         | 1978-12-11 | f    | aaa@asdf.com |
|          17 | ?         | ??         | 1978-12-11 | f    | aaa@asdf.com |
+————-+———–+————+————+——+————–+

這當然不是我們希望看到的,我們需要的現實完美正確的中文:
我們還有最后一招:
mysql SET NAMES gbk Query OK, 0 rows affected (0.00 sec)
因為我們需要的是 gbk.
看看 mysql 中的 character 設置情況:
mysql SHOW VARIABLES LIKE %character%
+————————–+——————————————-+
| Variable_name            | Value                                     |
+————————–+——————————————-+
| character_set_client     | gbk                                       |
| character_set_connection | gbk                                       |
| character_set_database   | utf8                                      |
| character_set_results    | gbk                                       |
| character_set_server     | utf8                                      |
| character_set_system     | utf8                                      |
| character_sets_dir       | C:MySQLMySQL Server 5.0sharecharsets |
+————————–+——————————————-+
7 rows in set (0.00 sec)

mysql SHOW VARIABLES LIKE %collation%
+———————-+—————–+
| Variable_name        | Value           |
+———————-+—————–+
| collation_connection | gbk_chinese_ci  |
| collation_database   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+———————-+—————–+

這個才是我們最終需要的。
在來查看執行完 Mysql_jstl.jsp 后的數據庫中的結果:
mysql select * from employee;
|          14 | 王        | 彭給       | 1978-12-11 | f    | aaa@asdf.com |
|          15 | 田        | 王光       | 1978-12-11 | f    | aaa@asdf.com |
|          16 | 息        | 存入       | 1978-12-11 | f    | aaa@asdf.com |
|          17 | 往        | 小杯       | 1978-12-11 | f    | aaa@asdf.com |
+————-+———–+————+————+——+————–+

可以高興得看到了中文,并且在瀏覽器中也顯示正確。

但是僅僅這樣的話,當你重新啟動 mysql 的時候
所有的設置又失效了。
mysql show variables like %character%
+————————–+——————————————-+
| Variable_name            | Value                                     |
+————————–+——————————————-+
| character_set_client     | latin1                                    |
| character_set_connection | latin1                                    |
| character_set_database   | utf8                                      |
| character_set_results    | latin1                                    |
| character_set_server     | utf8                                      |
| character_set_system     | utf8                                      |
| character_sets_dir       | C:MySQLMySQL Server 5.0sharecharsets |
+————————–+——————————————-+

mysql SHOW VARIABLES LIKE %collation%
+———————-+——————-+
| Variable_name        | Value             |
+———————-+——————-+
| collation_connection | latin1_swedish_ci |
| collation_database   | utf8_general_ci   |
| collation_server     | utf8_general_ci   |
+———————-+——————-+
重新讀取又出現亂碼:
mysql select * from employee;
+————-+———–+————+————+–
| employee_id | last_name | first_name | birth      | s
+————-+———–+————+————+–
|          12 | ?         | ??         | 1978-12-11 | f
|          13 | ?         | ??         | 1978-12-11 | f
|          14 | ?         | ??         | 1978-12-11 | f
|          15 | ?         | ??         | 1978-12-11 | f
|          16 | ?         | ??         | 1978-12-11 | f
|          17 | ?         | ??         | 1978-12-11 | f
+————-+———–+————+————+–
所以我們需要在客戶端設置系統能識別中文的編碼 gbk 并沒有保存到 my.ini 文件中。所以要修改 my.ini 文件

在 [mysql] 段加入一下代碼改成:default-character-set=gbk 這樣設置就得到保存了。
重啟就可以了。mysql show variables like %character%
+--------------------------+----------------
| Variable_name            | Value
+--------------------------+----------------
| character_set_client     | gbk
| character_set_connection | gbk
| character_set_database   | utf8
| character_set_results    | gbk
| character_set_server     | utf8
| character_set_system     | utf8
| character_sets_dir       | C:MySQLMySQL
+--------------------------+----------------
mysql SHOW VARIABLES LIKE %collation%
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | gbk_chinese_ci  |
| collation_database   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+

以上就是如何終結 mysql 中文亂碼,丸趣 TV 小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注丸趣 TV 行業資訊頻道。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-19發表,共計8324字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 台南市| 古蔺县| 瑞金市| 镶黄旗| 城市| 伊宁市| 凌海市| 邹平县| 广昌县| 广安市| 嘉荫县| 冷水江市| 黑龙江省| 沙河市| 青岛市| 青铜峡市| 池州市| 琼海市| 和静县| 嘉定区| 霍邱县| 西峡县| 新化县| 鹤庆县| 前郭尔| 彰化市| 平陆县| 海淀区| 神池县| 两当县| 新津县| 会东县| 桂阳县| 南安市| 新建县| 黎城县| 百色市| 白山市| 永靖县| 桦甸市| 长寿区|