国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

解決Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general

2024-07-24 12:39:06
字體:
供稿:網(wǎng)友

今天在用java與mysql數(shù)據(jù)庫時(shí)發(fā)現(xiàn)Illegal mix of collations (latin1_swedish_ci,IMPLICIT)and (utf8_general_ci,COER錯(cuò)誤提示,下面我們來看解決方法吧.

部署完項(xiàng)目,測試一下,誒,數(shù)據(jù)出來了沒有多大問題,暗舒一口氣,繼續(xù)測吧,一點(diǎn)新建完了,報(bào)錯(cuò)了,看看什么錯(cuò)誤.

一看完了:java.sql.SQLException: Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '=' 是這個(gè)錯(cuò)誤,什么原因呢,第一次遇到.

頭大了,去查文檔說是:結(jié)果集中有兩種字符集,我暈了,怎么會(huì)這樣呢,看看表結(jié)構(gòu),一種啊, 繼續(xù)查吧,代碼如下:

  1. SHOW VARIABLES LIKE 'character_set_%'--查看一下 顯示 
  2.  
  3. +--------------------------+----------------------------+ 
  4.  
  5. | Variable_name | Value | 
  6.  
  7. +--------------------------+----------------------------+ 
  8.  
  9. | character_set_client | utf8| 
  10.  
  11. | character_set_connection | utf8| 
  12.  
  13. | character_set_database | latin1 | 
  14.  
  15. | character_set_results | utf8| 
  16.  
  17. | character_set_server | latin1 | 
  18.  
  19. | character_set_system | utf8 | 
  20.  
  21. | character_sets_dir | /home/jh/mysql/share/mysql/charsets | 
  22. --Vevb.com 
  23. +--------------------------+----------------------------+ 

再用 SHOW VARIABLES LIKE 'collation_%';查看一下,顯示如下代碼:

  1. +----------------------+-------------------+ 
  2.  
  3. | Variable_name | Value | 
  4.  
  5. +----------------------+-------------------+ 
  6.  
  7. | collation_connection | utf8_swedish_ci | 
  8.  
  9. | collation_database | latin1_swedish_ci | 
  10.  
  11. | collation_server | latin1_swedish_ci | 
  12.  
  13. +----------------------+-------------------+ 

原來如此啊,哈哈,知道錯(cuò)在哪里,剩下的就好辦了.

解決方法,依次執(zhí)行:

  1. set character_set_database =utf8; 
  2.  
  3. set character_set_results =utf8; 
  4.  
  5. set character_set_server =utf8; 
  6.  
  7. set character_set_system =utf8; --此處utf-8也可以 

然后執(zhí)行:

  1. SET collation_server = utf8_general_ci 
  2.  
  3. SET collation_database = utf8_general_ci 

執(zhí)行完之后,請(qǐng)檢查mysql下每個(gè)數(shù)據(jù)庫,表,字段是否都是utf8,不是則改過來,這樣子就不會(huì)出現(xiàn).

最笨的方法是重裝一下數(shù)據(jù)庫,一般不要用這種方法呀.

最終解決方法:

1.1 如果是windows版本的mysql,那么在安裝的時(shí)候,系統(tǒng)就會(huì)提示用哪種編碼,如果安裝的時(shí)候設(shè)置錯(cuò)誤了,修改mysql安裝目錄下的my.ini文件,代碼如下:

  1. [mysql] 
  2.  
  3. default-character-set=utf8 
  4.  
  5. ... 
  6.  
  7. # The default character set that will be used when a new schema or table is 
  8.  
  9. # created and no character set is defined 
  10.  
  11. default-character-set=utf8 

配置好后,重啟mysql.

1.2 如果是linux版本的mysql

修改mysql的配置文件,使數(shù)據(jù)庫與服務(wù)器操作系統(tǒng)的字符集設(shè)置一致,vi /etc/my.cnf 設(shè)置,如果沒有發(fā)現(xiàn)這個(gè)文件,就新建1個(gè),代碼如下:

  1. [mysqld] 
  2.  
  3. datadir=/var/lib/mysql 
  4.  
  5. socket=/var/lib/mysql/mysql.sock 
  6.  
  7. default-character-set=utf8 

增加的關(guān)鍵一句,使得數(shù)據(jù)庫缺省以u(píng)tf8存儲(chǔ),當(dāng)然,修改后,要重啟數(shù)據(jù)庫,這樣設(shè)置后對(duì)新建的數(shù)據(jù)庫表才起作用,代碼如下.

用SHOW VARIABLES LIKE 'character_set_%';命令查看到如下內(nèi)容:

  1. +--------------------------+-----------------------------------------------------------------------+ 
  2.  
  3. | Variable_name | Value | 
  4.  
  5. +--------------------------+-----------------------------------------------------------------------+ 
  6.  
  7. | character_set_client | utf8| 
  8.  
  9. | character_set_connection | utf8| 
  10.  
  11. | |character_set_database |utf8 | 
  12.  
  13. | character_set_filesystem | binary | 
  14.  
  15. | character_set_results | utf8| 
  16.  
  17. | character_set_server | utf8 | 
  18.  
  19. | character_set_system | utf8 | 
  20.  
  21. | character_sets_dir | /home/jh/mysql/share/mysql/charsets | 
  22.  
  23. +--------------------------+-----------------------------------------------------------------------+ 

發(fā)現(xiàn)關(guān)鍵項(xiàng)目已經(jīng)用了utf8,但這樣還不夠,還要保證客戶端也是用utf8的字符集來操作的,登錄的時(shí)候,要用以下命令:mysql --default-character-set=utf8 -u root -p,再次用SHOW VARIABLES LIKE 'character_set_%';命令查看,結(jié)果變成了,代碼如下:

  1. +--------------------------+-----------------------------------------------------------------------+ 
  2.  
  3. | Variable_name | Value | 
  4.  
  5. +--------------------------+-----------------------------------------------------------------------+ 
  6.  
  7. | character_set_client | utf8 | 
  8.  
  9. | character_set_connection | utf8 | 
  10.  
  11. | character_set_database | utf8 | 
  12.  
  13. | character_set_filesystem | binary | 
  14.  
  15. | character_set_results | utf8 | 
  16.  
  17. | character_set_server | utf8 | 
  18.  
  19. | character_set_system | utf8 | 
  20.  
  21. | character_sets_dir | /home/jh/mysql/share/mysql/charsets/ | 
  22.  
  23.  
  24. +--------------------------+-----------------------------------------------------------------------+ 

這樣才能保證客戶端所發(fā)命令都是基于utf8格式的,比如說建立數(shù)據(jù)庫和表,默認(rèn)就會(huì)以u(píng)tf8編碼,而無須再次指定,再次說一句對(duì)新建的數(shù)據(jù)庫和表起作用.

另外:第三種方法,網(wǎng)上看到的,先記錄一下.

1.如果安裝mysql的編碼已不能更改,很多朋友是購買虛擬主機(jī)建立網(wǎng)站,無權(quán)更改MYSQL的安裝編碼,這一關(guān)我們可以跳過,因?yàn)橹灰竺娴牟骄壅_,一樣能解決亂碼問題

2.修改數(shù)據(jù)庫編碼,如果是數(shù)據(jù)庫編碼不正確: 可以在phpmyadmin 執(zhí)行如下命令: ALTER DATABASE `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin

以上命令就是將test數(shù)據(jù)庫的編碼設(shè)為utf8.

3.修改表的編碼,代碼如下:

ALTER TABLE `category` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin

以上命令就是將一個(gè)表category的編碼改為utf8.

4.修改字段的編碼,代碼如下:

ALTER TABLE `test` CHANGE `dd` `dd` VARCHAR( 45 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL

以上命令就是將test表中 dd的字段編碼改為utf8.

5.如果是這種情況容易解決,只需檢查下頁面,修改源文件的charset即可,這個(gè)正確就無問題了.

6.這種情況也是修改頁面charset即可.

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 乃东县| 宁明县| 西峡县| 安远县| 鄂托克前旗| 泰宁县| 襄城县| 行唐县| 奉化市| 南靖县| 赤城县| 维西| 喀喇| 上犹县| 和静县| 陈巴尔虎旗| 富川| 华蓥市| 洪江市| 临沂市| 永吉县| 紫金县| 旬邑县| 庆元县| 莱芜市| 盘山县| 丹江口市| 通渭县| 武威市| 青海省| 绍兴市| 特克斯县| 柳江县| 黄梅县| 甘孜县| 武宁县| 聂荣县| 博客| 临汾市| 齐齐哈尔市| 宣武区|